問題描述:實現a+b=c 其中a、b位數超過100位
演算法思想:大數使用字串儲存,每乙個單元儲存運算元的每一位,之後執行位相加。
基本思路:字串反轉、字元變數字、位運算、反序輸出
c語言**:
#include
#include
#define max 101
void print(char
sum);
void bignumadd(char a,char b,char
sum);
int main()
void bignumadd(char a,char b,char
sum)
; char n[max]=;
memset(sum,0,max*sizeof(char)); //這裡不能寫成memset(sum,0,sizeof(sum));原因見注意事項1
//字串反轉且字串變數字
int lena=strlen(a);
int lenb=strlen(b);
for (i=0;i1]-'0';
} for (i=0;i1]-'0';
} //位運算
for (i=0;isum[i]=(m[i]+n[i]+c)%10+'0';//得到末位
c=(m[i]+n[i]+c)/10;//得到進製
} } void print(char
sum)
}
注意事項:
1、要注意sizeof的用法
char sum[100], sizeof(sum) =100 (表示整個字串的大小)
char* sum 或 char sum (為函式引數), sizeof(sum)=4 (表示儲存乙個指標的單元大小)
主要的區別:sum在定義的時候意義不同
2、memset(sum,0,max*sizeof(char)):
作用:一般是用於初始化或清空乙個記憶體塊,等價於迴圈
因為:在計算機裡,0的二進位制都是0,-1的二進位制都是1。
3、在這裡,對字串進行初始化0操作很重要,它會影響到位操作和輸出,要引起重視!
4、100位相加,和最大為101位,故申請最大為101
C語言大數相加
當要執行相加的兩個數超出c語言所能表示的範圍時,就不能用正常的加法運算來執行相加操作,這時候可以用兩個字元陣列接收要相加的兩個大數,然後從兩個大數的地位進行按位相加,並設定乙個進製標誌,如果標誌為1,表示有進製,否則沒有進製。要注意的是字元陣列的地位為數字的高位,所以要從陣列下標大的地方開始相加。i...
c語言大數相加
由於整型數的位數有限,因此整型數不能滿足大整數 超長整數 的運算要求 大整數計算是利用字串來表示大整數,即用字串的一位字元表示大整數的一位數值,然後根據四則運算規則實現大整數的四則運算。大數相加我主要總結如下 1.定義兩個字元陣列,並輸入想要相加的大數。並分別計算出長度 include includ...
c語言實現大數相加
文章 兩個大數我們可以用陣列來儲存,然後在陣列中逐位進行相加,再判斷該位相加後是否需要進製,為了方便計算,我們將數字的低位放在陣列的前面,高位放在後面。捕獲.jpg include includeint main n2 10000 int result 10001 t1 10000 t2 10000...