11111111111111111111 + 22222222222222222222 = 33333333333333333333
最近遇到一道很有意思的題目,就如上所示,20位的數字相加。剛開始的時候,沒多想,覺得就是簡單地加減法,那還不簡單,和我一樣想法的人應該還會有吧。可是執行後發現,根本行不通,於是乎,正視這道題目。
原理很簡單:就是咱們小時候列豎式計算加法的過程,滿10進1的那種
22222222222222222222
33333333333333333333(+)
————————————
55555555555555555555(這裡沒有進製哈,看下面的**中的例子,有進製相關的操作和解釋)
#include
#include
#include
#define m 1000
intmymax
(int x,
int y)
//返回x,y中最大值
intmain()
}}if(num1[
mymax
(len1 -
1, len2 -1)
+1]==
0)//如果n位整數最高位為0, 則輸出n-1位 例如01234,其正確結果為1234
for(i =
mymax
(len1 -
1, len2 -1)
; i >=
0; i--
)printf
("%d"
, num1[i]);
if(num1[
mymax
(len1 -
1, len2 -1)
+1]!=
0)for(i =
mymax
(len1 -
1, len2 -1)
+1; i >=
0; i--
)printf
("%d"
, num1[i]);
printf
("\n");
system
("pause");
return0;
}
下面拿乙個具體的兩組數字來方便理解上面的**
解釋**塊1:
例如:
a : 1 2 3 4 5 這裡是手動輸入的a值
b : 6 7 8 9 這裡是手動輸入的b值
j = 0;
for (i = len1 - 1; i >= 0; i--) num1[j++] = a[i] - '0';
我們可以知道len1 = 5,len2 = 4;
當 i = len1 - 1 = 4 時num1[0] = a[4] - '0' = 5
同理 num1[1] = a[3] - '0' = 4,
num1[2] = 3, num1[3] = 2, num1[4] = 1
num1 =
j = 0;
for (i = len2 - 1; i >= 0; i--) num2[j++] = b[i] - '0';
根據上面num1的分析,我們可以得到num2=
解釋**塊2
現在已知條件是:len1 = 5,len2 = 4;
num1 =
num2 =
下面來分析**塊
for (i = 0; i <= mymax(len1 - 1, len2 - 1); i++) }}
首先,我們把已知的條件帶進去
for (i = 0; i <= 4; i++) }}
5 4 3 2 1
9 8 7 6
——————————————————
14num1[0] = num1[0] + num2[0] = 5 + 9 = 14 > 10
那麼num[1]++ = 4++ = 5;
num[0] = num[0] - 10 = 14 - 10 = 4;
5 5 3 2 1
9 8 7 6
——————————————————
4 13
num1[1] = num1[1] + num2[1] = 5 + 8 = 13 > 10
那麼num[2]++ = 3++ = 4;
num[1] = num[1] - 10 = 13 - 10 = 3;
5 5 4 2 1
9 8 7 6
———————————————————
4 3 11
num1[2] = num1[2] + num2[2] = 4 + 7 = 11 > 10
那麼num[3]++ = 2++ = 3;
num[2] = num[2] - 10 = 11 - 10 = 1;
5 5 4 3 1
9 8 7 6
——————————————————
4 3 1
num1[3] = num1[3] + num2[3] = 3 + 6 = 9 < 10
5 5 4 3 1
9 8 7 6
——————————————————
4 3 1 9
num1[4] = num1[4] + num2[4] = 1 + 0 = 1 < 10
5 5 4 3 1
9 8 7 6
——————————————————
4 3 1 9 1
此時num1 =
大數加法A B
題意 我有乙個非常簡單的問題要告訴你。給定兩個整數 a 和 b,您的工作是計算 a b 的總和。input 輸入的第一行包含乙個整數 t 1 t 20 這意味著測試用例的數量。然後t線跟隨,每行由兩個正整數a和b組成。請注意,整數非常大,這意味著你不應該使用32位整數來處理它們。您可以假定每個整數的...
牛客大數加法 A B
題目描述 實現乙個加法器,使其能夠輸出a b的值。輸入描述 輸入包括兩個數a和b,其中a和b的位數不超過1000位。輸出描述 可能有多組測試資料,對於每組資料,輸出a b的值。示例1輸入 2 610000000000000000000 10000000000000000000000000000000...
大數加法(整數的加法
大數加法的原理是利用模擬人計算比較大的數的時候採用的用的一種演算法。實際上就是小學的加法運算,不過是用字元陣列,模擬的運算。思路 1 先定義兩組足夠長的字元陣列,和整形陣列。將數字陣列裡面的元素全部初始化為零。2 然後將輸入的數字字串,轉變為數字,存放在整形陣列內,注意存放時將低位到高位依次存放在陣...