我們正在努力尋找乘以兩個3位數字所產生的最大回文數。迴文編號是從兩側讀取相同的數字(例如:12345654321或簡單的9009)。 以下代碼編譯正確,但顯然存在邏輯錯誤,因爲當它應該是906609時,輸出是749947.如果有人能夠幫助解釋我在哪裏得到這個問題的邏輯錯誤,那將是非常好的。歐拉項目#4最大回文產品
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轉換成等於自身的字符串 –