两个大数相加

/**
 * NOTE: 如何实现两个非常大的数字(已经超出了Number范围)的加法运算。
 * 注意由于这两个已经超过了Number范围,因此不能用Number存,这里我们选择使用字符串存储。
 */

/**
 * NOTE: 思路: 我们只要将两个数字前面补0至相同的长度,
然后从低位到高位进行相加, 同时用一个变量记录进位的信息即可。
 */

/**
 * 大的数字相加
 * @param {number string} a
 * @param {number string} b
 */
function bigNumberSum(a, b) {
  const m = a.length

  if (a.length < b.length) {
    m = b.length
  }
  for (let i = 0; i < m; i++) {
    if (!a[i]) {
      a = `0${a}`
      continue
    }
    if (!b[i]) {
      b = `0${b}`
      continue
    }
  }
  return sumFn(a, b).join("")
}


function sumFn(a, b) {
  const res = []
  let flag = 0
  // 这里需要从低位到高位
  for (let i = b.length - 1; i > -1; i--) {
    const sum = flag + +a[i] + +b[i]
    // 进 1
    if (sum > 9) {
      flag = 1
    } else {
      flag = 0
    }
    // 保持 10 进制的
    res[i] = sum % 10
  }
  // 这里是最高位进 1
  if (flag === 1) {
    res.unshift(1);
  }
  return res
}

const res = bigNumberSum("48204203489204", "808089234802")
console.log(res)



你可能感兴趣的:(两个大数相加)