实现超出整数存储范围的两个大整数相加

试题:实现超出整数存储范围的两个大整数相加

实现超出整数存储范围的两个大整数相加function add(a,b)。注意a和b以及函数的返回值都是字符串。
比如我实现一个’123456789123456789’和’111111’相加的返回值为’123456789123567900’
实现思路,我给大家画了一幅图:
实现思路图

接下来实现的代码:

 function add(a, b) {
      let lenA = a.length,
        lenB = b.length,
        len = lenA > lenB ? lenA : lenB;
      // 先补齐位数一致
      if (lenA > lenB) {
        for (let i = 0; i < lenA - lenB; i++) {
          b = '0' + b;
        }
      } else {
        for (let i = 0; i < lenB - lenA; i++) {
          a = '0' + a;
        }
      }
      // 为什么会使用reverse方法,是因为进位是按照个位开始向前进位的,因此需要将它反转过来,
      // 因为我们接下来的操作是从下标为0开始操作
      let arrA = a.split('').reverse(), 
        arrB = b.split('').reverse(),
        arr = [],
        carryAdd = 0;   // carryAdd表示进位标识
      for (let i = 0; i < len; i++) {
        let temp = Number(arrA[i]) + Number(arrB[i]) + carryAdd;
        arr[i] = temp > 9 ? temp - 10 : temp;
        carryAdd = temp >= 10 ? 1 : 0;
      }
       // 当执行完之后,最后一位(也就是反转过来的第一位)
       // 相加大于等于10的时候(即进位),需要向前进一位
      if (carryAdd === 1) {
        arr[len] = 1;
      }
      return arr.reverse().join('');
    }
    console.log(add('123456789123456789','111111'))  // 123456789123567900

参考链接:https://juejin.im/post/5c1869ab6fb9a049f154207a