JS实现大数相加
const num1 = "1248859103109591728912488591031095917289"
const num2 = "32481239839485789343248123983948578934"
问题:
js中要实现上面两个数的相加,如果转成number类型,就会损失进度,因为已经超出number类型的范围
解决
1.使用bigInt类型
const num1 = "1248859103109591728912488591031095917289"
const num2 = "32481239839485789343248123983948578934"
let sum = BigInt(num1) + BigInt(num2)
sum = sum + ''
console.log('sum =', sum);
使用bigInt会很容易将这个问题解决,但是会存在一定的兼容性问题,还是因为IE (●’◡’●)
2.那就自己封装函数吧
const fn = (num) => {
let arr = num.split('').reverse()
return arr
}
let arr1 = fn(num1)
let arr2 = fn(num2)
let arr3 = []
let maxLen = arr1.length > arr2.length ? arr1.length : arr2.length
let isAdd = false // 是否需要进位
for (let i = 0; i < maxLen; i++) {
arr3[i] = (arr1[i] || 0) * 1 + (arr2[i] || 0) * 1 + (isAdd ? 1 : 0)
if (arr3[i] > 9) {
isAdd = true
arr3[i] = arr3[i] % 10
} else {
isAdd = false
}
}
let str = arr3.reverse().join('')
console.log('str =', str);
使用的思想是位运算,效率还算比较高,还有一定的优化空间