日期:2014-05-16 浏览次数:20414 次
????? 这里用一个小技巧:|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的数值计算会出现另外一个不准确的结果。
我是用在超长的流水号上,希望这个能对你有用。
?
?