C語言 大數相加

2021-07-11 09:34:23 字數 1188 閱讀 3820

問題描述:實現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...