首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JavaScript的大数加法、乘法跟乘方

2012-10-30 
JavaScript的大数加法、乘法和乘方????? 这里用一个小技巧:|0默认转为数值并取整,因为p和q可能长度不同,有

JavaScript的大数加法、乘法和乘方

????? 这里用一个小技巧:|0默认转为数值并取整,因为p和q可能长度不同,有可能会出现p[i]或q[j]成为undefined,|0比parseInt更强,可以自动将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

?

这不是太的好处,它真正的用途是document.write(bigNumAdd("111111112222222211","111111112222222211"));

得出的结果是222222224444444422。如果用JavaScript的数值计算会出现另外一个不准确的结果。

我是用在超长的流水号上,希望这个能对你有用。

?

?

热点排行
Bad Request.