2つの3桁の数字を掛け合わせて生成される最大の回文番号を探しています。回文番号は、両側から同じものを読み取る番号です(例:12345654321または単に9009)。 次のコードは正しくコンパイルされますが、出力が906609のときに出力が749947になるため、論理エラーが発生していることがはっきりしています。Project Euler#4最大のPalindromeプロダクト
boolean valid = false;
for (int i = 999*999; i > 100*100; i--) {
if (i/100000 == i % 10 &&
i/10000 % 10 == i/10 % 10 &&
i/1000 % 10 == i/100 % 10) {
int buffer = i;
int total = 1;
for (int k = 2; k < buffer; k++) {
if (buffer % k == 0) {
buffer /= k;
total *=k;
}
}
if (buffer >= 100 && buffer < 1000 && total >=100 && total < 1000) {
System.out.println(i);
System.out.println(total);
System.out.println(buffer);
break;
}
}
}
}
}
IDEでデバッガを接続し、コードを行ごとに歩いたときに何を観察しましたか? – Kon
あなたが使っているリトマステストを実際に分析することなく、貼り付けたスニペットの最初の行のコードの目的は何ですか?あなたはどこでもvalid = trueを設定していません.... –
リトマステストでロジックをテストする別のヒントは、iをそれ自身と逆のストリングに変換するような簡単なテストを最初に試みることです –