源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JS实现两个大数(整数)相乘

  • 时间:2021-02-15 16:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JS实现两个大数(整数)相乘
大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下:
[u]复制代码[/u] 代码如下:
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(""); }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部