(C語言)高精度加法

2021-07-30 23:58:38 字數 1216 閱讀 5449

我們知道 int 和 long 型別的變數在64位作業系統中能表示的資料範圍為[-2^31, 2^31 - 1], long long 型別的變數能表示的資料範圍為 [-2^63, 2^63 - 1], 但是現在我們需要計算的資料超過了long long 型資料能表示的範圍。這時候我們就需要使用高進度演算法。什麼是高精度演算法呢,簡單來說,就是使用

整數陣列或者

字元陣列來表示乙個long long 型資料無法表示的大數(正數或負數). 然後用這兩個陣列來模擬加法和減法運算,從而實現任意範圍數字的相加減。

輸入有多組資料。

對於每組測試資料,在一行中給出兩個正整數a,b(a,b的位數小於等於1000),中間用乙個空格隔開。

當讀到檔案結尾時輸入結束

對於每組輸入,在一行中輸出兩個正整數相加的結果。

123456 123

123456789 987654321

5555555555555555555 66666666666666

123579

1111111110

5555622222222222221

(高精度即輸入的資料已經大大的超過了int 和long的資料範圍,所以基本思想就是將輸入的資料以字串的形式儲存到乙個字元陣列中,然後將字元陣列倒置,因為不倒置不好處理相加之後的進製,然後從兩個字元陣列的第乙個元素分別向後相加,如果相加後的結果大於零則向前進一,然後該位取除以十之後的餘數,最後輸出相加後的字串陣列即可)

#include

#include

int main(),an2[1000]=;

int lena1,lena2,i;

void addition(int a,int b,int k1,int k2);

while(scanf("%s%s",a1,a2)!=eof)

return 0;

}void addition(int a,int b,int k1,int k2),k,i;

k=( k1>k2 ? k1:k2);

for(i=0;ic[i]=a[i]+b[i]+c[i];

c[i+1]=(int)c[i]/10;

c[i]=(int)c[i]%10;

}if(c[k]) k++;

for(i=k-1;i>=0;i--)

printf("%d",c[i]);

printf("\n"); 

}

C語言 高精度加法

問題描述 輸入兩個整數 a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於 a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列 a,a 0 用於儲存 a的個位,a 1 用於儲存 a的十位,依此類推。同樣可以用乙個陣列 b來儲存...

C語言 高精度加法

演算法提高 高精度加法 時間限制 1.0s 記憶體限制 256.0mb 問題描述 在c c 語言中,整型所能表示的範圍一般為 231到231 大約21億 即使long long型,一般也只能表示到 263到263。要想計算更加規模的數,就要用軟體來擴充套件了,比如用陣列或字串來模擬更多規模的數及共運...

c 語言 高精度加法

問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列a,a 0 用於儲存a的個位,a 1 用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。計算c ...