JS實現兩個大數(整數)相乘 例項程式碼
阿新 • • 發佈:2019-02-08
在javascript中,大數,即超出語言所能表示的數字最大範圍的數字,那麼如何實現兩個大數相乘呢?
程式碼:
程式碼:
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); } www.jbxue.com 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(""); } www.jbxue.com 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(""); }