題目地址 https://www.acwing.com/problem/content/description/793/ios
題目描述
給定兩個正整數,計算它們的和。算法
輸入格式
共兩行,每行包含一個整數。ide
輸出格式
共一行,包含所求的和。spa
算法
很明顯 輸入會超過64位 也就是即便long long 類型也不能進行常規加法
那麼輸入就是用string 接收字符串 來模擬加法3d
加法主要是三個數字的相加 數字a 數字b 以及進位
因此 int sum = (a - '0') + (b - '0') + next;
而後獲得除開進位後本地應該顯示的數字 int local = sum % 10;
計算進位 next = sum / 10;
因爲加法是從最小位開始的 因此字符串作了逆轉code
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
還要考慮數字a 和數字b 位數不一樣的狀況blog
while (i < a.size() && i < b.size()) {
add(a[i], b[i], next);
i++;
}ip
while (i < a.size()) {
add(a[i], '0', next);
i++;
}ci
while (i < b.size()) {
add('0', b[i], next);
i++;
}
還有一種特殊狀況,最後一位還要進位
也就是最後的和 比最大的數還要多一位1 記得最後判斷下字符串
if (next == 1)
v.push_back(1);
最後顯示記錄結果 記得也要作逆轉
reverse(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
cout << v[i];
}
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 #include <vector> 5 6 7 using namespace std; 8 9 string a,b; 10 vector<int> v; 11 12 void add(int a,int b,int& next) 13 { 14 int sum = (a - '0') + (b - '0') + next; 15 int local = sum % 10; 16 v.push_back(local); 17 next = sum / 10; 18 } 19 20 int main() 21 { 22 cin >> a >> b; 23 24 reverse(a.begin(),a.end()); 25 reverse(b.begin(), b.end()); 26 27 int i = 0; int next = 0; 28 while (i < a.size() && i < b.size()) { 29 add(a[i],b[i],next); 30 i++; 31 } 32 33 while (i < a.size()) { 34 add(a[i],'0',next); 35 i++; 36 } 37 38 while (i < b.size()) { 39 add('0',b[i],next); 40 i++; 41 } 42 if (next == 1) 43 v.push_back(1); 44 reverse(v.begin(), v.end()); 45 for (int i = 0; i < v.size(); i++) 46 { 47 cout << v[i]; 48 } 49 50 51 return 0; 52 53 } 54 55 56 做者:defddr 57 連接:https://www.acwing.com/solution/AcWing/content/2074/ 58 來源:AcWing 59 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。