Untitled Web Page

とある高専生の割と誰得なウェブページです。

Problem 0002:Digit Number

問題

Digit Number

与えられた2つの整数 a と b の和の桁数を出力して終了するプログラムを作成して下さい。

Input

複数のデータセットが与えられます。各データセットは1行に与えられます。各データセットは2つの整数 a と b が1つのスペースで区切られて与えられます。入力の終わりまで処理して下さい。a と b は非負の整数とします。

Output

各データセットごとに、a + b の桁数を出力して下さい。

Sample Input

5 7
1 99
1000 999

Output for the Sample Input

2
3
4

解法1:ループ

a + b の値を 10 で割った商が 0 以下になるまで,桁数を代入する変数(以下のコードでは x )をインクリメントした。

#include <iostream>
using namespace std;

int main() {
   long long int a, b, c;
   int x;
   bool flg = true;

   while (1) {
      cin>>a;
      if (cin.eof()) break;
      cin>>b;

      c=a+b;

      x = 1;
      flg = true;
      while (flg) {
         if ((c=c/10)>0)
            x++;
         else
            flg = false;
      }
      cout<<x<<endl;
   }
   return 0;
}

解法2:対数

正の数 N の整数部分が n 桁のとき,n − 1 ≤ log10 N < n なので,log10 N の値を int 型にキャストして 1 加えた。

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
   long long int a, b;
   while (cin >> a >> b)
      cout << (int)log10((double)(a+b)) + 1 << endl;
}