浏览器可以计算15位数字的加减,对于16位的数字它就搞不定了,但是,最近出了bigint数据类型,可以在16位及以上位数的数字最后加上n,就可以进行相加了;
下面我们用算法来演示如何进行大数相加;
前提:这两个参数肯定是字符串类型,不能是数字类型,因为number类型无法表示出来这么大的数字(不考虑bigint)
1、进行竖式计算,对应位进行相加,一旦相加超过10,那么相当于溢出,overflow为true,后一位相加时要多加1;
const add = (a, b)=>{
//找出两数中位数较大的位数
const maxLength = Math.max(a.length, b.length)
//声明出overflow和总和
let overflow = false
let sum = ''
//从第1位开始进行相加,加到最大的那一位
//这里第1位其实就是数字最右边那一位
for(let i=1; i < maxLength; i++){
// const a1 = a[a.length - 1] a的最右边一位
//如果那一位上没有数字了,就赋值为0
const ai = a[a.length - i] || '0'
const bi = b[b.length - i] || '0'
//把相同位上的数字最为整数相加
let ci = parseInt(ai) + parseInt(bi) + parseInt(overflow ? 1 : 0)
overflow = ci >= 10
//如果溢出那么ci最后结果应该减去10
ci = overflow ? ci - 10 : ci
//把每一位得到的数字和之前的数字拼接在一起
//注意顺序不能混!!!一定是ci在前面
sum = ci + sum
}
//最后进行到最左边一位时,如果这一位是溢出的,那么要在头位上加上'1'
sum = overflow ? '1' + sum : sum
return sum
}
console.log(add("11111111101234567","77777777707654321"))