JS处理两个超大的数相加

本文探讨了如何在JavaScript中处理两个大数相加的问题,提供了解题思路和相关知识点,适合JavaScript开发者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道鄙视题:

let a = '99999999999999';
    let b = '9999';
    console.log(bigAdd(a,b));
    // 100000000009998
function bigAdd(str1, str2) {
      let res = '';
      let temp = 0;
      str1 = str1.split('')
      str2 = str2.split('')
      while (str1.length || str2.length || temp) {
        temp += ~~str1.pop() + ~~str2.pop()
        res = (temp % 10) + res
        temp = temp > 9 
      }
      return res.replace(/^0+/, '')
    }

掌握知识点

    1. ~~ 表示按位取反
    当~~的值不是数字的时候返回值是0,如果是字符串数字或者数字则返回本身
    ~~undefined -> 0  
    ~~true -> 1  ~~false -> 0
    ~~'12' -> 12(Number)
    2. Array.pop() 返回删除当前数组最后一个的元素 没有则返回undefined
    3. % 取模运算  当一个数和比他大的数取模,值是自身  6 % 10 = 6

解题思路

    1. 首先将str1,str2分割成数组
    2. 然后循环,结束条件是两个数组长度都为0(没以元素了),temp是false(因为如果两个数组的元素都删除只剩下一个的时候,如果大于十要进1,那么要在走一次循环,因为~~undefined是0,~~true是1,1+0=1  不影响)
    3. 就是利用小学的加法运算 各位加各位,十位加十位以此类推,然后利用字符串相加的特性
    4. temp % 10  表示:因为两个单数相加最大就是18,那么和10取模就是当前的个位值 
    5. (temp % 10) + res :因为此时的temp已经是Number 所以要让他变成字符串(注意一定是让res在后面 这样顺序才对,因为当前的值是从右面开始的,eg: '1'+'2' ==12 '2'+'1' == 21)
    6. temp = temp>9: 值是true或false ,经行加法运算的时候会转换成1或0
    7. 如果当前res前面有0就要把他清空不然浏览器会误认为是XXX进制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值