回到 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)。
- 若判斷式為 true 則
carry=1
且 count++
,若 false 則 carry=0
。
- 最後判斷完成後使用
a/=10、b/=10
拋棄 a 與 b 的尾數。
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;
int count = 0, carry = 0; while(a || b) { if(a%10 + b%10 + carry >= 10) { count++; carry=1; } else { carry=0; } a /= 10; b /= 10; }
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 題選集UVa 10035 - Primary Arithmetic