JS实现大数(整数)相乘

来源:互联网 发布:新手如何经营淘宝网店 编辑:程序博客网 时间:2024/05/17 06:56

大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下:

console.log(bigMut("567", "1234")); // 699678function bigMut(big, common) {big += "";common += "";if (big.length < common.length) {big = [common, common = big][0];}big = big.split("").reverse();var oneMutManyRes = [];var i = 0,len = big.length;for (; i < len; i++) {oneMutManyRes[oneMutManyRes.length] = oneMutMany(big[i], common) + getLenZero(i);}var result = oneMutManyRes[0];for (i = 1, len = oneMutManyRes.length; i < len; i++) {result = bigNumAdd(result, oneMutManyRes[i]);}return result;}function getLenZero(len) {len += 1;var ary = [];ary.length = len;return ary.join("0");}function oneMutMany(one, many) {one += "";many += "";if (one.length != 1) {one = [many, many = one][0];}one = parseInt(one, 10);var i = 0,len = many.length,resAry = [],addTo = 0,curItem,curRes,toSave;many = many.split("").reverse();for (; i <= len; i++) {curItem = parseInt(many[i] || 0, 10);curRes = curItem * one + addTo;toSave = curRes % 10;addTo = (curRes - curRes % 10) / 10;resAry.unshift(toSave);}if (resAry[0] == 0) {resAry.splice(0, 1);}return resAry.join("");}function bigNumAdd(big, common) {big += "";common += "";var maxLen = Math.max(big.length, common.length),bAry = big.split("").reverse(),cAry = common.split("").reverse(),i = 0,addToNext = 0,resAry = [],fn,sn,sum;for (; i <= maxLen; i++) {fn = parseInt(bAry[i] || 0);sn = parseInt(cAry[i] || 0);sum = fn + sn + addToNext;addToNext = (sum - sum % 10) / 10;resAry.unshift(sum % 10);}if (resAry[0] == 0) {resAry.splice(0, 1);}return resAry.join("");}


0 0
原创粉丝点击