題目: UVa - 10035 - Primary Arithmetic
題目說明
每筆測資會有兩個數字,計算這兩個數字相加時做進位的次數。
解題思路
使用兩個 String 讀取測資,利用一個 int 做 Carry,重複將 Carry 加上兩數最後一位數字的和,若大於等於 10 表示有做進位,最後再將 Carry 除以 10,並將兩者都 pop_back()
刪除最後一位,直到其中一者做完為止。
參考解法
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 43 44 45 46 47 48 49
| #include <iostream>
using namespace std;
int main() { string num1, num2;
while (cin >> num1 >> num2) { if (num1 == "0" && num2 == "0") break;
int carry = 0, carryNum = 0;
while (num1.size() > 0 && num2.size() > 0) { carry += (num1.back() - '0') + (num2.back() - '0'); if (carry >= 10) ++carryNum; num1.pop_back(), num2.pop_back(); carry /= 10; }
if (num1.size() > 0) { if (carry + (num1.back() - '0') >= 10) ++carryNum; } else if (num2.size() > 0) { if (carry + (num2.back() - '0') >= 10) ++carryNum; }
switch (carryNum) { case 0: cout << "No carry operation." << endl; break; case 1: cout << "1 carry operation." << endl; break; default: cout << carryNum << " carry operations." << endl; break; } } }
|