JavaScriptの大きな数の加算、掛け算、乗法

1958 ワード

ここでは、p[i]またはq[j]がundefinedになる可能性があり、|0がパーrseIntより強くなり、undefinedの値を自動的に0にすることができるので、p[i]またはq[j]が数値であるかどうかを判断する必要はありません.
     /\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の数値で計算すると、もう一つの不正確な結果が出ます.
私は超長い流水番号に使います.これがあなたに役に立ちますように.