題目: UVa - 10035 - Primary Arithmetic

題目說明

每筆測資會有兩個數字,計算這兩個數字相加時做進位的次數。

解題思路

使用兩個 String 讀取測資,利用一個 int 做 Carry,重複將 Carry 加上兩數最後一位數字的和,若大於等於 10 表示有做進位,最後再將 Carry 除以 10,並將兩者都 pop_back() 刪除最後一位,直到其中一者做完為止。

參考解法

c++
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;
}
}
}