---
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個整數相加時產生了幾次進位的情況。這將幫助小學老師分析加法題目的難度。
:::
### 輸入 / 輸出說明
| **輸入說明** | **輸出說明** |
|:-:|:-:|
|  |  |
### 解題思路
:::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/
:::