問:如何計算大數(shù)字的相加?大到可以溢出的那種。
大數(shù)字相加,避免使用傳統(tǒng)的相加(可能會溢出),所以使用數(shù)學題的思路來考慮這個問題。
目前只考慮兩個大數(shù)字正整數(shù)的相加。
1.末尾加上末尾,如果大于等于10,產(chǎn)生進位。如果沒有進位就是0.
2.倒數(shù)第二位加上倒數(shù)第二位,再加上進位,如果大于等于10,產(chǎn)生進位。
3.倒數(shù)第三位加上倒數(shù)第三位,再加上進位,如果大于等于10,產(chǎn)生進位。
。。。
直到加完數(shù)字小的位數(shù)。第一循環(huán)結(jié)束,進行第二循環(huán)。
第二循環(huán)是指,數(shù)字較?。ɑ蛘唛L度較短)的數(shù)字已經(jīng)加完結(jié)束了。剩下的就是第一循環(huán)加完后,剩下的進位與剩下的相加。
方法同上。
1.使用數(shù)組把加完的每一位結(jié)果存進去。
2.將兩個數(shù)字轉(zhuǎn)換為數(shù)組,并倒敘(由于個人習慣遍歷從0開始)
具體代碼如下:
let number1 = 999999989101112;
let number2 = 87919991;
let number1len = (number1.toString()).length;
let number2len = (number2.toString()).length;
let minlen = Math.min(number2len,number1len);
let maxlen = Math.max(number2len,number1len);
let maxValue = number1>number2?number1:number2;
let arr1 = [...(number1.toString())].reverse()
let arr2 = [...(number2.toString())].reverse()
let maxarr = arr1.length>arr2.length?arr1:arr2;
let jinwei = 0;
let result = []
for(let i = 0;i<minlen;i++){
? ? ? let tempArr1 = Number(arr1[i]),
? ? ? tempArr2 = Number(arr2[i]);
? ? ? result.push((tempArr1+tempArr2)%10+jinwei)
? ? ? jinwei = ~~((tempArr1+tempArr2)/10)
}
for(let i=minlen;i<maxlen;i++{
? ? ? let tempValue = Number(maxarr[i]);
? ? ? result.push((tempValue+jinwei)%10);
? ? ? jinwei = ~~((tempValue+jinwei)/10);
}
if(jinwei != 0)
? ? ? result.push(jinwei)
result = (result.reverse()).join("")
console.info(result)


如果還有其他更好的方法,或者上面的方法可以優(yōu)化,還請指教