实现超出整数存储范围的两个大整数相加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