ミヤ.com

元女子大生。

Java修行 第2回 世界のナベアツ問題:文字列を整数に

こんにちは。3の倍数と3のつく数字のときにバカになるミヤコです。

 

今回のJava問題では、数字を文字として扱う面白い問題でした。

 

f:id:xxmiyacomxx:20170914093938p:plain

 

問題 No.207 世界のなんとか

  

A以上B以下の整数のうち、3の倍数および3の付く数を、小さい順に出力してください。
なお、「3の付く数」とは、10進数表記にした時、
少なくとも1つの桁が3であるような数のことです。

 

入力

A B

 

出力

該当する数を、小さい順に。
1つ出力するごとに改行。
該当する数字がない場合は何も出力しない。

 

まさに世界のナベアツ的問題です。

 

 

最終コード

 

このようになりました。

 

public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int A = sc.nextInt();
        int B = sc.nextInt();
        
        for(int i = A; i<=B; i++){
            if(i%3==0){
                System.out.println(i);
            }else if(Integer.toString(i).contains("3")){
                System.out.println(i);
            }
        }
}

 

「3の倍数」の部分は、クリアしやすいと思います。

あまりが0のものを出力するというわけですね。

 

問題は「3のつく数字」です。

Stringで扱う文字列には、文字列検索をするcontainsメソッドがありますから、

今回は 整数を、いったん文字列に変換して、3を含む文字も出力させるようにしましょう。

 

整数を文字列に変換するには、Integerクラスが持つtoStringメソッドを使います。

 

文字列になった整数 = Integer.toString(文字列にしたい整数)

 

これで、整数が文字列に変わりました。

さて、それから文字列探索をしていきます。

今回は文字列 i から3を探していくので、

 

Integer.toString(i).contains("3") 

 

探す 3 も文字列にしているところがポイントですね。

 

というわけで、ifの条件で「文字列 i の中に文字 3 が含まれていたらtrue」となり、

i が出力されるようになりました!

 

世界のナベアツも、実は奥が深いのですね。

 

本日も読んでくださって、ありがとうございます(*^_^*)