算法面试题 大数相加

大数相加运用了很多运算符的知识 

 function addBig(a, b){ 
    let temp = 0,
        res = '';
    a = a.split('');
    b = b.split('');
    while( a.length || b.length || temp){
      temp += ~~a.pop() + ~~b.pop();
      res = (temp % 10 ) + res;   //字符串拼接
      temp = temp > 9 ? 1 : 0;  //判断进位
    }
    return res.replace(/^0+/g, '');  //str.replace(要被替换的字符串/正则对象,替换文本)
  }

 做个解释:

    使用~操作符进行取反是会将字符串转换为数字的,在进行一个取反操作,转换为了字符串本身代表的数字考虑下我们数组循环      的最后为空时,[].pop()的结果为undefined,而 Number(undefined)的结果为NaN,~NaN的结果为-1, ~~NaN的结果 为0,当        你使用NaN进行加法运算时,一切结果都没有了意义。所以这个地方必须为~~a.pop(), 而不能使用Number进行强制转换。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值