--- title: 'UVa 10035 題解 — C++' disqus: hackmd --- # UVa 10035 題解 — C++ :::info :bulb: 此筆記為UVa 10035的題目詳解,包含解題思路、C++範例程式碼。 ::: ## Primary Arithmetic (ZeroJudge c014.) ### [題目](https://zerojudge.tw/ShowProblem?problemid=c014) :::success 在小學時我們都做過加法的運算,就是把2個整數靠右對齊然後,由右至左一位一位相加。如果相加的結果大於等於10就有進位(carry)的情況出現。你的任務就是要判斷2個整數相加時產生了幾次進位的情況。這將幫助小學老師分析加法題目的難度。 ::: ### 輸入 / 輸出說明 | **輸入說明** | **輸出說明** | |:-:|:-:| | ![image](https://hackmd.io/_uploads/S1vG_TRBC.png) | ![image](https://hackmd.io/_uploads/BkEm_aCHR.png) | ### 解題思路 :::warning 我們在使用直式計算的時候習慣將進位的數字寫在要進位數字上方,提醒我們這一位需要加上這個數字,因此在解決這題的時候也可以使用同樣的方法。 我利用 a、b 儲存輸入的兩個數字、c 儲存進位的數字,判斷 **當前 a 的個位數字 + b 的個位數字 + c = s** 是否 >= 10(下一位數字是否需要進位),若需要進位,則將 c 設為 s 的十位數(個位數就是這一位的數字)。 ::: ### 範例程式碼 ```C++= #include <iostream> using namespace std; int main () { ios::sync_with_stdio(false); cin.tie(0); long long int a, b; while (cin >> a >> b) { if (a == 0 && b == 0) break; long long int c = 0, t = 0; while (a > 0 || b > 0 || c > 0) { int s = a % 10 + b % 10 + c; if (s >= 10) t++; c = s / 10; a = a / 10; b = b / 10; } if (t == 0) cout << "No carry operation." << endl; else if (t == 1) cout << t << " carry operation." << endl; else cout << t << " carry operations." << endl; } return 0; } ``` ### 運行結果 <font color="#00BB00">**AC**</font> (24ms, 320KB) ###### tags: `CPE 1星` :::danger 查看更多資訊請至:https://www.tseng-school.com/ :::