大数相加

JS语言支持的整数安全范围是(-2^53 , 2^53),所以进行数字相加计算时,只能在该范围内进行计算,一旦超出,就无法进行计算了。

但是在日常学习工作中又不可避免的会遇到大数相加的问题,因此就需要对其进行解决。

大数相加问题的解决思路:

  1. 将数字存储为字符串
  2. 求和时对每一位进行求和:这一过程中需要判断是否产生进位,当加到最开始的数字时还要判断是否产生进位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function bigNumSum (s, t) {
let a = s.split(''), b = t.split('');
let len = Math.max(a.length, b.length);
let res = []; //最终结果
let flag = false; // 判断是否有进位
for (let i = 0; i < len; i++) {
let num1 = a.pop(), num2 = b.pop();
num1 = num1 ? parseInt(num1) : 0;
num2 = num2 ? parseInt(num2) : 0;
let tempSum; //暂时记录两数相加

if (flag) { //首先判断是否有进位
tempSum = num1 + num2 + 1;
} else {
tempSum = num1 + num2;
}

if (tempSum > 9) { // 判断两数相加是否产生进位
res.push(tempSum % 10);
flag = true;
} else {
res.push(tempSum);
flag = false;
}

if (i == len - 1 && flag)//最开始两数相加,且存在进位情况
res.push(1);
}
return res.reverse().join('');
}
文章作者: qinwei
文章链接: https://qw-null.github.io/2022/07/23/大数相加/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QW's Blog