大數加法
為什麼c語言會有大數加法這個專門的概念?
難道大數不是直接相加就行了嗎?
其實是因為c語言中定義的整數型都是有位數限制的。比如int型的取值範圍為-2147483648~+2147483647,即使是long long int的取值範圍也只是-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807。
這樣就導致如果數字超過這個範圍就會出錯,因此才有大數加法這個概念。
為了解決數字相加過大導致的錯誤,我們在計算大數相加的時候不使用整數型來進行計算。而是使用字串陣列來進行計算!
完整**如下:
初學的時候看起可能會有點難度,但是堅持下去就會有很大的收穫。
#include
#include
#define n 10000
//定義陣列的長度,這個長度要大於結果的長度
intmain()
,sz_2[n]
=,sz[n]=;
//初始化
int n,m,z;
int i;
printf
("請輸入第乙個數\n");
gets
(sz_1)
;printf
("請輸入第二個數\n");
gets
(sz_2)
; n=
strlen
(sz_1)
;//計算開始的時候兩數的長度
m=strlen
(sz_2)
; z=n>m?n:m;
// z++
;//這裡的z++是為了防止結果進製導致不夠
for(i=
0;i(n>m)
//下面把大的位直接放到陣列裡
}else
}for
(i=z-
1;i>
0;i--)}
if(sz[0]
!=0) sz[z]
='\0';}
else
sz[z-1]
='\0';}
printf
("兩數相加:\n");
puts
(sz)
;//輸出結果驗證
return0;
}
**執行結果如下:
總結:大數加法看上去有點難度,但是其實很簡單,只需要你認真看完!
個人心得:興趣與成就感是我們進步的最大動力!希望可以寫自己複習看起舒適,別人一下子就可以看懂的部落格。
大數 加法 c語言
最近遇到乙個關於大數的問題頓時感覺好方,決定系統學一下大數。注意 關於大數問題,由於陣列不好界定輸入數的大小 陣列的長度 因此主要思想就是先用字串輸入儲存在字串陣列中,再逆序存入整形陣列進行最後逐位運算。剛開始通過部落格寫的 思路 輸入採用字元陣列儲存,然後將輸入存在整形陣列裡,然後逐位相加即可,同...
C語言大數加法
當計算兩個較大的數的和時,可能c語言中的型別諸如int,long,long long型都無法表示時,此時應該換一種思維,將數看成是字串,採用字元陣列的方法進行儲存與運算。同時,應該注意到字元陣列的儲存方式,在字元陣列中,低位位址存放的是字元陣列的高位,所以執行加法時,應該從陣列下標大的位址開始加。以...
c 大數加法
在c 中,我們經常需要表示整數。但是,c 的基本資料型別中,最大的long也只能表示 9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之間的數。貨幣型別也不是無限大。如果我們需要表示更大的數,就需要用到一定的演算法來完成。這次,我和大家一起討...