【CPE一顆星選集】UVA10035 – Primary Arithmetic【C++】

C++

問題文

Online Judge - Offline

二つの数字を足し合わせたときに何回繰り上げたのかを数える問題です。

サンプルコード

cpe/一顆星/uva10035/01.cpp at main · mintson0517/cpe
Contribute to mintson0517/cpe development by creating an account on GitHub.

コード解説

string a, b;

    while (cin >> a >> b) {
        if (a == "0" && b == "0") return 0;

まず今回はa, bの二つを入力して、入力が0,0になった場合は終了します。

reverse(a.begin(), a.end());
reverse(b.begin(), b.end());

その後個数から足し合わせて、繰り上げがあった場合は繰り上げたりするので、入力された整数を反転させます。

ヘッダーファイルに#include <algorithm>が必要です

int carry = 0;
int carry_count = 0;

for (int i = 0; i < max(a.size(), b.size()); ++i) {
            int sum = carry;
            if (i < a.size()) sum += a[i] - '0';
            if (i < b.size()) sum += b[i] - '0';

            if (sum >= 10) {
                carry = 1;
                ++carry_count;
            } else {
                carry = 0;
            }
        }

繰り上げがあった場合はcarry_coutにカウントされます。
carryは繰り上げ後に位に1を追加するために使用します。

if (carry_count == 0) {
            cout << "No carry operation." << endl;
        } else if (carry_count == 1) {
            cout << "1 carry operation." << endl;
        } else {
            cout << carry_count << " carry operations." << endl;
        }

最後は得たcarry_countを条件に従って、出力するだけです。
ここで注意する必要があるのは一つの場合と複数の場合で文字にsがつくことです。

タイトルとURLをコピーしました