Posted in Javascript onApril 28, 2014
大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下:
console.log(bigMut("567", "1234")); // 699678 function 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(""); }
JS实现两个大数(整数)相乘
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@