我试图用Java解决Project Euler的问题。问题4.
http://projecteuler.net/problem=4
它说我必须找到由两个3位数字的产品制成的最大回文。
所以这是代码(只是不起作用的部分):
public class Problem4PE {
public static void main(String[] args){
int result = 0;
Integer output = 0;
for (int i = 100; i < 1000; i++) {
for (int j = 100; j < 1000; j++) {
output = i*j;
String strout = output.toString();
StringBuilder stb = new StringBuilder();
char[] chrout = strout.toCharArray();
for (int x = 0; x < chrout.length; x++) {
stb.append(chrout[x]);
}
StringBuilder stres = new StringBuilder("");
for (int k = chrout.length-1; k > -1 ; k--) {
stres.append(chrout[k]);
}
String stbb = stb.toString();
String string = stres.toString();
Boolean bool = stbb.equals(string);
if (bool){
result = output;
}
}
}
System.out.println(result);
}
}
所以上面的输出出来了:580085 但是当我提交它时,它显示不正确。我不懂为什么。那么请你告诉我问题是在代码中,还是我在理解问题时犯了错误。
答案 0 :(得分:4)
您的代码会跳过最大的产品。
result
不能保证在for
次循环的两次迭代之间增加,因此result
的最终值不是最大值。
答案 1 :(得分:2)
试试这个
if (bool && output > result) { // a second if condition.
result = output;
}
它给了我正确答案。