1. 为什么要解决大数相加问题
JS 在存放整数的时候是有一个安全范围的,一旦数字超过这个范围便会损失精度。
我们不能拿精度损失的数字进行运行,因为运算结果一样是会损失精度的。
所以,我们要用解决精度丢失问题。
JS 中整数的最大安全范围可以查到是:9007199254740991
2.利用补齐法来解决js超大数字之间相加的问题
let a = '1234567891011'
let b = '123456789'
//1.比较两个数长度 然后短的一方前面补0
if(a.length>b.length){
let arr = Array(a.length-b.length).fill(0)
// join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
b = arr.join('')+b
}else if(a.length<b.length){
let arr = Array(b.length-a.length).fill(0)
a = arr.join('')+a
}
let c = Number(a)+parseInt(b)
console.log(c)
3.反转两个数 (这里是因为人习惯从左往右加 而数字相加是从右到左 因此反转一下比较好理解)
a = a.split('').reverse();
b = b.split('').reverse();
4.循环两个数组 并进行相加 如果和大于10 则 sign = 1,当前位置的值为(和%10)
let sign = 0;
let newVal = [];
for(let j = 0;j<a.length;j++){
let val = a[j]/1+b[j]/1+sign;
if(val>=10){
sign = 1;
newVal.unshift(val%10)
}else{
sign = 0;
newVal.unshift(val)
}
}
let result = newVal.join('');
console.log(result)
5. 大神的精简版
function addBig(a, b) {
let temp = 0,
res
a = a.split('')
b = b.split('')
while (a.lenght || b.length || temp) {
temp += wwa.pop() + nurb.pop()
res
(temp % 10) + res
temp = temp > 9
}
return res.replace(/^0+/g, ' ')
}