AOJ 0002 Digit Number

リンク AOJ 0002 Digit Number

方針

初めは「a+bを10で割ったときの商が、10より小さくなるまで割り続ける」という方針でした。

  • 例:a+b=130のとき
    • 130 \div 10 = 13(1回目の割り算。商が13なので、10より大きい。さらに割る)
    • 13 \div 10 = 1(2回目の割り算。商が1なので、10より小さい。おしまい)
      • 割った回数+1が桁数なので2+1=3の3桁が答え
  • 例:a+b=1230のとき
    • 1230 \div 10 = 123(1回目の割り算。商が123なので、10より大きい。さらに割る)
    • 123 \div 10 = 12(2回目の割り算。商が12なので、10より小さい。さらに割る)
    • 12 \div 10 = 1(3回目の割り算。商が1なので、10より小さい。おしまい)
      • 割った回数+1が桁数なので3+1=4の4桁が答え
,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;  割っていけばいいんだろ・・・?
  ヾ;;;ハ    ノ       .::!lリ;;r゛
   `Z;i   〈.,_..,.      ノ;;;;;;;;>  そんなふうに考えていた時期が
   ,;ぇハ、 、_,.ー-、_',.    ,f゛: Y;;f.   俺にもありました
    ~''戈ヽ   `二´    r'´:::. `!

Java 桁数 とかでググると、もっと美しい解法を見つけたのでそれを使いました。

方針2

整数から文字列に変換して、その文字列長を計算する。

文字列長を計算するメソッドはStringクラスのlengthです。こいつを使えばいいです。

では、intからStringへの変換はどのようにして行うのでしょうか?

答えはこいつです。IntegerクラスのtoStringメソッドです。
例:

  int res = Integer.toString(1000+10).length();
  System.out.println(res);

これを実行すると1010の桁数である4が出力されます。

ソース

import java.util.*;
public class Main {
    static Scanner sc = new Scanner(System.in);
    static int a, b;
    public static void main(String[] args) {
        while(read()){
            slove();
        }
    }

    static boolean read(){
        if(!sc.hasNext())return false;
        a = sc.nextInt(); 
    b = sc.nextInt();
        return true;
    }

    static void slove(){
        int ans = Integer.toString(a+b).length();
        System.out.println(ans);
    }

}