js如何返回输入两个数值的乘积_JS实现两个大数(整数)相乘_javascript技巧

大数,即超出语言所能表示的数字最大范围的数字,此时的数字只能用字符串来表示。那么如何实现两个大数相乘呢?我用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("");

}

相关标签:整数 相乘

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值