“しんぶんし”のように上から読んでも下から読んでも同じになる文字列を回文という。今回はこの回文で遊んでみよう。

[問1]
文字列を引数で受け取り、それが回文かどうかをbooleanで返すメソッドを作成し、以下の処理を作成せよ。

[実行例1]

文をいれてください>しんぶんし
「しんぶんし」は回文です!

[実行例2]

文をいれてください>たけうま
「たけうま」は回文ではありません。

[問2]
12321などの上から読んでも下から読んでも同じになる数字を回文数という。
10進数で表しても2進数で表しても共に回文数となる数字を、10進数の10以上の数字から小さい順に5個表示せよ。
(例)11は10進数だと回文数だが2進数だと1011となるので回文数ではない。よって今回の問題では11は除外される

[ヒント]
IntegerクラスにあるtoBinaryStringメソッドにintの数を渡すと、2進数の文字列表現を取得することができる。
String binStr = Integer.toBinaryString(num);

/*
 * 10進数、2進数いずれで表現しても回分数となる
 * 10進数で10以上の数字を小さい方から順に5個求めよ

 */

public class Q1 {

	public static void main(String[] args) {
		String word="しんぶんし";
		if(isKaibun(word)){
			System.out.println(word+"は回分です");
		}else{
			System.out.println(word+"は回分ではありません");
		}

		for (int i = 11, count = 0; count < 5; i += 2) {
			String intStr = String.valueOf(i);
			String binStr = Integer.toBinaryString(i);

			if (isKaibun(intStr) && isKaibun(binStr)) {
				System.out.println(intStr);
				System.out.println(binStr);
				count++;
			}
		}
	}

	public static boolean isKaibun(String str) {
		boolean isKai = true;
		char[] data = str.toCharArray();
		for (int i = 0; i < data.length / 2; i++) {
			if (data[i] != data[data.length - 1 - i]) {
				isKai = false;
				break;
			}
		}
		return isKai;
	}
}