CPE 一顆星選集 49 道必考題
題目連結:https://zerojudge.tw/ShowProblem?problemid=c014
內容
給定兩個正整數,進行加法運算,輸出產生幾次進位。
最後一列有 2 個 0 代表輸入結束。
範例輸入
123 456
555 555
123 594
0 0
範例輸出
No carry operation.
3 carry operations.
1 carry operation.
想法
使用 string 分別存取兩數,開始模擬直式運算(記得考慮各種可能的數字,我卡超久= =)。
程式碼
    
    
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
   | #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr) using namespace std;
  int main(){     fastio;     string s1, s2;     int carry, temp;          while(cin >> s1){         cin >> s2;                           if(s1 == "0" && s2 == "0") break;         carry = temp = 0;         int index_s1 = s1.length() - 1, index_s2 = s2.length() - 1;         while(index_s1 >= 0 && index_s2 >= 0){             if(((s1[index_s1] - '0') + (s2[index_s2] - '0') + temp) >= 10){                 ++carry;                 temp = 1;             }             else temp = 0;             --index_s1, --index_s2;         }         if(index_s1 >= 0 && s1[index_s1] == '9' && temp == 1){             while(index_s1 >= 0 && s1[index_s1] == '9'){                 ++carry;                 --index_s1;             }         }         else if(index_s2 >= 0 && s2[index_s2] == '9' && temp == 1){             while(index_s2 >= 0 && s2[index_s2] == '9'){                 ++carry;                 --index_s2;             }         }
          if(carry == 0) cout << "No carry operation.\n";         else if(carry == 1) cout << "1 carry operation.\n";         else cout << carry << " carry operations.\n";     } }
   |