回到 CPE 必考一顆星 49 題選集

UVa 10035 - Primary Arithmetic

( Tip: 點擊左上方的三橫槓選單按鈕,可以收起內鑲 PDF 頁的左側書籤。)

Step 1. 題目概要

  • 每列會給兩個數字,數字的長度不會超過10位數。且兩個數字的長度不一定會一樣
  • 輸入 0 0 時,表示結束。
  • 進位總數量(count)等於0,輸出No carry operation.
  • 進位總數量(count)等於1,輸出1 carry operation.
  • 進位總數量(count)等於n (n>1),輸出n carry operations.

Step 2. 解題思路

  • 專注於 當前進位(carry)進位總數量(count) 的計算上。
  • 當前進位(carry) 使用判斷式 a%10 + b%10 + carry >= 10 來進行判斷,a%10、b%10 表示分別取 a 與 b 的尾數,+ carry 表示 加 上一位的 進位(carry,carry 只會是 0 or 1)。
  • 若判斷式為 truecarry=1count++,若 falsecarry=0
  • 最後判斷完成後使用 a/=10、b/=10 拋棄 a 與 b 的尾數。

Step 3. 範例輸入與輸出 - Sample Input and Output

1
2
3
4
123 456
555 555
123 594
00
1
2
3
No carry operation.
3 carry operations.
1 carry operation.

Step 4. 參考程式碼 - Accepted Code

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
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
while(cin >> a >> b) {
if(a == 0 && b == 0) return 0;

// Calculation
int count = 0, carry = 0;
while(a || b) { //當a或b有一數等於0便停止計算
if(a%10 + b%10 + carry >= 10) {
count++;
carry=1;
} else {
carry=0;
}
a /= 10;
b /= 10;
}

// Output
if(count == 0) cout << "No carry operation.\n";
else if(count == 1) cout << "1 carry operation.\n";
else cout << count << " carry operations.\n";
}
return 0;
}
回到 CPE 必考一顆星 49 題選集