arrows blog

解いた問題などを適当に書いていきます。

AOJ 0002 Digit Number

問題概要

整数a, bが与えられる。
a + bの桁数を出力せよ。

制約

解法

まず、a + bを求める。この結果をcとする。
cについて、桁数を求めるためには、0になるまで、何回10で割れるか(切り捨て)を確かめれば良い。

例えば、a=1000, b=999の場合、その和c=1999であり、

  1. 1999/10=199
  2. 199/10=19
  3. 19/10=9
  4. 9/10=0

となり、計4回、10で割れる。



また、この問題では、入力の終わり(= EOF)まで処理する必要がある。
これは、C言語C++では以下のように書くことができる。

while (scanf("%d %d", &a, &b) != EOF) {
    // データセット毎の処理
}
while (cin >> a >> b) {
    // データセット毎の処理
}

他にもif文を使ったり、scanfの戻り値を利用した書き方があるが、ここでは省略する。

コード

#include <iostream>

using namespace std;

int get_digit(int val)
{
    int res = 0;
    while (val > 0) {
	val /= 10;
	res++;
    }
    return res;
}

int main()
{
    int a, b;
    while (cin >> a >> b) {
	int sum = a + b;
	cout << get_digit(sum) << endl;
    }
    return 0;
}