這是我寫過的程式,主要也是為記錄和學習,以下**是該程式的思路和答案(注釋是我自己寫的),如有不對,請指出。
問題描述
求兩個不超過200位的非負整數的和。
輸入資料
有兩行,每行是乙個不超過200位的非負整數,沒有多餘的前導0。
輸出要求
一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。
輸入樣例
輸出樣例
思路
對於有200位數的數,在c語言中沒有固有的資料型別儲存它,所以我們用乙個字串來儲存它,字串的本質是字元陣列,所以我們可以用乙個字元陣列ans[201]來儲存結果。
相加就可以模擬小學生列豎式做加法,叢個位數開始,超過或等於十則進一,所以兩數相加的結果位數可能要+1。
程式**
#include
#include
#define base 10
#define n 200
char a[n+1]
,b[n+1]
;char ans[n+1]
;//用來存放結果
intmain()
while
(carry>0)
if(j>anslen)
//因為兩數相加存在進製問題,所以結果可能的長度會大於anslen
anslen=j;
for(i=anslen-
1;i>=
0;i--
)//從後往前掃瞄ans陣列,如果陣列的倒數第i個元素不等於'0',則跳出迴圈
if(ans[i]
)break;if
(i<0)
//如果到掃瞄到第一位 ,陣列的元素還是'0',則將i=0,表明該結果為0
i=0;
for(
;i>=
0;i--
)//從倒數第i位往前輸出
printf
("%d"
,ans[i]);
printf
("\n");
return0;
}
大整數加法
include include include include define debug void plus char char char int is valid char void reverse char int main int argc,char argv up loop 0 strcpy...
大整數加法
方法 這裡用了資料結構棧,實際上棧更方便實現高精度加法。步驟 1 第乙個資料加數按輸入順序 高位到低位 入棧1。此時棧頂為最低位 2 第二個資料加數按輸入順序 高位到低位 入棧2。此時棧頂為最低位 3 將棧1 棧2均pop出棧頂做加法,並考慮進製,結果入棧3,這時棧3正好是低位入棧。4 處理多餘的棧...
大整數加法
include include include define max len 200 int an1 max len 10 int an2 max len 10 char szline1 max len 10 char szline2 max len 10 int main bool bstarto...