最近遇到乙個關於大數的問題頓時感覺好方,決定系統學一下大數。
注意:關於大數問題,由於陣列不好界定輸入數的大小(陣列的長度),因此主要思想就是先用字串輸入儲存在字串陣列中,再逆序存入整形陣列進行最後逐位運算。
剛開始通過部落格寫的**:
思路:輸入採用字元陣列儲存,然後將輸入存在整形陣列裡,然後逐位相加即可,同時注意進製處理。
//大數加法1
#include#include#define m 10000
#define kk -48// 0字元的asc ii值是48
/*取lenga和lengb大的那個 */
int maxl(int a,int b)
/*化字元為數字 */
int zz(char c)
int main()
for(i=0;i<(b+1)/2;i++)
/*加運算 */
maxl=maxl(a,b);
for(i=0,c=0;i<=maxl;i++)
/*最後一位若大於0就先輸出*/
if(sum[maxl]>0) printf("%d",sum[maxl]);
/*逆序列印sum */
for(i=maxl-1;i>=0;i--)
printf("\n");
}return 0;
}
雖然**執行符合要求,但感覺比較麻煩,因此又寫了下面這個**:
//大數加法2
#include#include#define m 100005
char s1[m],s2[m];
int a[m],b[m],c[m];
int main()
}/*去除前導0*/
i=k;
while(c[i]==0) i--;
/*判斷兩個非負數之和是否為0,以及逆序列印c*/
if(i<0) printf("0");
else
printf("\n");
}return 0;
}
C語言大數加法
當計算兩個較大的數的和時,可能c語言中的型別諸如int,long,long long型都無法表示時,此時應該換一種思維,將數看成是字串,採用字元陣列的方法進行儲存與運算。同時,應該注意到字元陣列的儲存方式,在字元陣列中,低位位址存放的是字元陣列的高位,所以執行加法時,應該從陣列下標大的位址開始加。以...
c 大數加法
在c 中,我們經常需要表示整數。但是,c 的基本資料型別中,最大的long也只能表示 9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之間的數。貨幣型別也不是無限大。如果我們需要表示更大的數,就需要用到一定的演算法來完成。這次,我和大家一起討...
C語言大數加法學習 複習
大數加法 為什麼c語言會有大數加法這個專門的概念?難道大數不是直接相加就行了嗎?其實是因為c語言中定義的整數型都是有位數限制的。比如int型的取值範圍為 2147483648 2147483647,即使是long long int的取值範圍也只是 922 3372 0368 5477 5808 92...