超超超超超大数字相乘计算

function multiply(a, b) {
  a = a.split('').reverse()
  b = b.split('').reverse()

  let _tenMark = 0, _sumArr = [], _conArr = [], _sum = []
  for (let i = 0, j = b.length; i < j; i++) {
    if (i > 0) _conArr.push(0)
    for (let m = 0, n = a.length; m < n; m++) {
      if (_sumArr.length === i) {
        _sumArr.push([])
        _sumArr[i] = _sumArr[i].concat(_conArr)
      }

      let _result = Number(a[m] * b[i] + _tenMark)
      let _single = _result % 10
      if (m === n - 1) {
        _tenMark = 0
        _sumArr[i] = _sumArr[i].concat(_result.toString(10).split('').reverse())
      }
      else {
        _tenMark = Math.floor(_result / 10)
        _sumArr[i].push(_single)
      }
    }
  }

  _tenMark = 0
  for (let i = 0, j = _sumArr[_sumArr.length - 1].length; i < j; i++) {
    let _result = 0, _single = 0
    for (let m = 0, n = _sumArr.length; m < n; m++) {
      _result += !!Number(_sumArr[m][i]) ? Number(_sumArr[m][i]) : 0
    }
    _result += _tenMark
    _single = _result % 10
    if (i === j - 1) {
      _sum = _sum.concat(_result.toString(10).split('').reverse())
    }
    else {
      _sum.push(_single)
      _tenMark = Math.floor(_result / 10)

    }
  }

  _sum = _sum.reverse().join('').replace(/\b(0+)/gi, "")

  return _sum ? _sum : '0'
}

console.log(multiply('1020303004875647366210', '2774537626200857473632627613')) // 2830869077153280552556547081187254342445169156730
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值