js俩个大数之和

js中,对整数范围是有限制的,超过安全范围会发生精度丢失,无法正常计算,常见的解决方案就是转成字符串处理,代码如下:

    // 俩个大数相加
    var a = '9998995523412341234123412441123412342',
        b = '0002245332134123423142341423424';
    function bigSum(a, b) {
      a = String(a).split('');
      b = String(b).split('');
      var sum = '', // a,b数组元素之和
          temp = 0, // a,b数组当前位置的计算结果
          length = a.length > b.length ? a.length : b.length;
      while (length + 1) {
        temp = ~~(temp / 10) + ~~a.pop() + ~~b.pop(); // ~~: 双非按位取反运算符,对于正数,向下取整;对于负数,向上取整;非数字取值为0
        sum = (temp % 10) + sum;
        length--;
      }
      return sum.replace(/^0+/, ''); // 去掉字符串前面的0
    }
    bigSum(a, b); // => '9998995525657673368246835583464835766'

思路:1.将俩个字符串数字转成数组,取数组长度大的为循环次数 length + 1,加1是为了计算最后一次进1的情况。

   2. temp 的值为( 当前a、b数组中数字之和 + 上次 temp 值去十取整 ),这里的值相加是数值相加,上次 temp 值若大于10需进1,则取1,小于10则取0。

   3. sum 的值为( 当前 temp 值取余 + 上次 sum 值 ),这里的值相加是字符串拼接,当前仅对 temp 取余,如果需要进1,放到下次循环中处理(即下次计算 temp 值中判断是否进1)。

脚踏实地行,海阔天空飞

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值