JavaScriptの大きな数の加算、掛け算、乗法
1958 ワード
ここでは、p[i]またはq[j]がundefinedになる可能性があり、|0がパーrseIntより強くなり、undefinedの値を自動的に0にすることができるので、p[i]またはq[j]が数値であるかどうかを判断する必要はありません.
/\d{1,N}/gをNビットの一回の演算に変更できます.デフォルトは4桁の一回です.
これはあまりにもメリットではありません.本当の用途はDcument.writeです.
結果は2222222222224444444422です.JavaScriptの数値で計算すると、もう一つの不正確な結果が出ます.
私は超長い流水番号に使います.これがあなたに役に立ちますように.
/\d{1,N}/gをNビットの一回の演算に変更できます.デフォルトは4桁の一回です.
function bigNumMulti(a,b){
var p = a.match(/\d{1,4}/g).reverse();
var q = b.match(/\d{1,4}/g).reverse();
var f1 = 0;
var result = "0";
for(var i = 0; i < p.length; i++){
var f2 = 0;
for(var j = 0; j < q.length; j++){
var t = (p[i]|0)*(q[j]|0);
t += new Array(f1+f2+1).join("0");
result = bigNumAdd(result, t);
f2 += q[j].length;
}
f1 += p[i].length;
}
return result;
}
function bigNumAdd(a,b){
var m = a.split('').reverse();
var n = b.split('').reverse();
var ret = [];
var s = 0;
for(var i = 0; i < a.length || i < b.length; i++){
var t = (m[i]|0) + (n[i]|0) + s;
ret.push(t%10);
s = (t/10)|0;
}
if(s){
ret.push(s);
}
return ret.reverse().join('');
}
function bigNumPow(a,b){
var ret = "1";
for(var i = 0; i < b; i++){
ret = bigNumMulti(ret,a.toString());
}
return ret;
}
document.write("2 4 ="+bigNumPow(2,4));
document.write("<br>");
document.write("4-2="+bigNumMulti("4","2"));
document.write("<br>");
document.write("2+4="+bigNumAdd("2","4"));
2の4乗=16 4-2=8 2+4=6これはあまりにもメリットではありません.本当の用途はDcument.writeです.
結果は2222222222224444444422です.JavaScriptの数値で計算すると、もう一つの不正確な結果が出ます.
私は超長い流水番号に使います.これがあなたに役に立ちますように.