大数通过普通相加会超出js的边界得到错误数据,因此我们可以考虑,通过字符串相加的方式实现
首先判断长度,取最大值,以及定义一个进位值
然后遍历字符串,进行相加,并加上进位值,并判断进位值,相加>=10,flag = 1,否则flag=0
最后判断flag是否还有进位,有则加1
算法实现如下:
function maxNumAdd(a, b) {
let a1 = (a + "").split("").reverse(),
b1 = (b + "").split("").reverse();
let length = a1.length >= b1.length ? a1.length : b1.length;
let res = [],
flag = 0;
for (let i = 0; i < length; i++) {
let num1 = Number(a1[i]) || 0;
let num2 = Number(b1[i]) || 0;
if (num1 + num2 + flag >= 10) {
res.unshift((num1 + num2 + flag) % 10);
flag = 1;
} else {
res.unshift(num1 + num2);
flag = 0;
}
if (i === length - 1 && flag) {
res.unshift(1);
}
}
console.log(res);
}
maxNumAdd(123456789, 987654321);