大数相加

Posted by deft on October 10, 2020

大数相加

JS 中整数的最大安全范围可以查到是:9007199254740991 即 (2 ** 53) - 1

1
2
//Example
add('9007199254740991', '1234567899999999999') // 结果为:1243575099254740990

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function addBigNum (str1, str2) {
  // 取这两个数的最大长度
  let maxLen = Math.max(str1.length, str2.length)
  str1 = str1.padStart(maxLen, 0)
  str2 = str2.padStart(maxLen, 0)
  // 定义加法过程中需要用的变量
  let t = 0
  let f = 0 // 进位
  let sum = ""
  for (let i = maxLen-1;i>=0;i--) {
    t = parseInt(str1[i]) + parseInt(str2[i]) + f
    f = Math.floor(t / 10)
    sum = t % 10 + sum
  }
  //
  if (f == 1) {
    sum = "1" + sum
  }
  return sum
}

addBigNum('9007199254740991', '1234567899999999999')

用新的基本类型 BigInt 也可以

1
BigInt('1234567899999999999') + BigInt('9007199254740991') // 1243575099254740990n