Coding_Gamesメモ_Happy_Numbers
Coding_Gamesメモ_Happy_Numbers
javaの学習にCoding_Games を知り、学習の記録としてメモ。
To debug:
System.err.println( );
を使うとデバックしやすくなる。(エラー出力は評価に影響しない)
内容
ある計算式を繰り返し使い、答えが1になる数字を探す
ルール
ある数字を桁ごとに2乗して、合計し、1になるかループするまで繰り返す
1になるならハッピーナンバーとして出力
1以外でループするならアンハッピーナンバーとして出力
例
23 → 22+32=13 → 12+32=10 → 12+02=1
24 → 22+42=20 → 22+02=4 → 42=16 → 12+62=37 → 32+72=58 → 52+82=89 → 82+92=145 → 12+42+52=42 → 42+22=20(loop)
インプット
1行目 テストする回数(N)
2行目から テストを行う数
アウトプット
テストを行った数がハッピーナンバーなら 数字 :)
アンハッピーナンバーなら 数字 :(
をテスト回数分、改行区切りで出力
使用したクラス
String
(String) = String.substring(x,y)
文字列の一部をコピーする。
x,yはint型
xがコピー開始位置、yは終了位置、yが指定されていなければ最後まで指定したのと同じ。
(String) = String.valueOf(x);
x をStringの文字列として出力( String.valueOf(123) → "123" )
Integer
(static int) = Integer.parseInt(str)
数字を表す文字列str をint に変換する
valueOf との違いはparseInt は基本のデータ型のint を出力し、valueOf はラッパークラスのInteger を出力する
Math
(double) = Math.pow((double) a , (double) b)
ab a のb 乗
ArrayList
ArrayList<型> al = new ArrayList<型>()
型には基本のデータ型(intなど)は使えない
ラッパークラスを使う
(boolean) = ArrayList.add(x)
x をリストの最後に追加
(boolean) = ArrayList.contains( x )
x がリストに含まれているか調べる
何回計算すればいいか分からないのでwhile や再帰関数を使う考え方
入力は最大26桁、int(最大10桁 232/2) やlong(最大19桁 264/2) では足りない
1度計算を行うと最大でも2025((92) *25) になるのでintの範囲に収まる
Coding_Games:https://www.codingame.com/ String (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html Integer (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html Math (Java Platform SE 8) - Oracle Cloud:http://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html ArrayList (Java Platform SE 8) - Oracle Cloud:https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html