JS大數(shù)字相加

問:如何計算大數(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)

運行結(jié)果

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容