AOJ 0002 Digit Number
問題概要
整数a, bが与えられる。
a + bの桁数を出力せよ。
制約
- 0 ≤ a, b ≤ 106
- データセットの数 ≤ 200
解法
まず、a + bを求める。この結果をcとする。
cについて、桁数を求めるためには、0になるまで、何回10で割れるか(切り捨て)を確かめれば良い。
例えば、a=1000, b=999の場合、その和c=1999であり、
- 1999/10=199
- 199/10=19
- 19/10=9
- 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; }