字串實現大整數相加(超詳細講解)

2021-09-26 15:28:03 字數 1982 閱讀 4949

既然是大整數,就肯定不能用int,long這些資料型別直接相加了,因為範圍超出了,這裡採用字串和字元陣列實現大整數相加

詳細說明:

case1:兩個整數長度一樣,比如123+123,這樣的就好操作了,直接每一位相加。

兩個整數長度一樣,比如75+16,還是每一位相加,5+5=11,這就得產生進製了,置這一位為(11-10)=1,同時產生carry進製1,然後 7+1+carry=9<10,輸出結果就可以了。

兩個整數長度一樣,比如90+10,各位0+0=0,十位9+1=10,置10為0,產生進製,這一進製是最高位,另行操作就ok了。

case2: 第乙個整數的長度比第二個整數的長度要長,比如12345+123,取12345和123長度相等的三位345與123相加,沒有進製,最後將12並上。

第乙個整數的長度比第二個整數的長度要長,比如12372+155,取12372的372和155相加,2和5相加,7和5相加=12,置為2,產生進製1。

第乙個整數的長度比第二個整數的長度要長,比如12732+555,取12732的732和555相加,2+5,3+5,7+5=12,置為2,產生進製1,這個進製 就得加到12732的千位2上,使之變成3了 。

第乙個整數的長度比第二個整數的長度要長,比如9999+1,取9999的個位9和1相加,得10,置為0,產生carry進製1,9999的十位9和carry相加 得10,置為0,又產生進製1,9999的百位和carry相加,得10,置0,carry=1,9999的千位和 carry相加得10,置0,carry=1,最後把1和產生得0000串起來得到結果10000

case3: 第二個整數的長度比第乙個要長,比如12+12345,由於加法具有交換律,交換位置得到12345+12,這樣就變成了case2,方法同case2。

public

static

void

biginteger

(string s1,string s2)

else}if

(carry!=0)

char

c=str.

tochararray()

;for

(int i=c.length-

1;i>=

0;i--)}

else

if(num1.length>num2.length)

int a=num1[i]

+num2[j]-48

-48+carry;

j--;if

(a>=10)

else}if

(carry==0)

char

c=str.

tochararray()

;for

(int i=c.length-

1;i>=

0;i--

) system.out.

print

(s);

}else

string s="";

for(

int i=temp.length-

1;i>=

0;i--

)else

if(i==0)

}if(carry==1)

s=1+s;

}else

} system.out.

print

(s);

//輸出結果

char c[

]=str.

tochararray()

;for

(int i=c.length-

1;i>=

0;i--)}

}}

分治演算法 大整數相乘 字串實現

由於網上大部分用分治演算法實現的大整數相乘程式,其輸入乘數竟然設定為int值,實現了分治思想,但實在不能稱其為大整數。本文實現了用字串儲存乘數,並且輸出正確結果。由於演算法未經過大量資料測試,可能還存在問題,歡迎指教討論,求輕踩。演算法分析 下面的函式均為分治函式設定,因為分治後得到的m1,m2,m...

leetcode 字串轉換整數 白痴講解

我的首先想法是正規表示式,原因是這是乙個從字串中尋找符合某種要求的字串。class solution object def myatoi self,s type str str rtype int 引入正則化模組 import re result re.findall r d str.strip 如...

字串相加js實現 Leetcode

415.字串相加 給定兩個字串形式的非負整數 num1 和num2 計算它們的和。num1 和num2 的長度都小於 5100 num1 和num2 都只包含數字 0 9 num1 和num2 都不包含任何前導零 你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式 p...