我知道我的 isPalindrome 方法有效,因为当我插入 906609 时它返回 true,并且我知道我的 Problem4 方法在某个时刻将 993 和 913 相乘,得到 906609,但由于某种原因它会等到 580085 返回数字。我究竟做错了什么?我就是无法让它工作:(
public static boolean isPalindrome(int number){
//checks to see if a number is a palendrome. (can't start with 0)
String numstring = Integer.toString(number);
char[] strarr = new char[String.valueOf(number).length()+1];
int x = 0;
int y = String.valueOf(number).length()-1;
for (int i=0;i<y+1;i++){
strarr[i] = numstring.charAt(i);
}
for (int a=0;a<String.valueOf(number).length()-1;a++){
if (strarr[x]!=strarr[y]){
return(false);
}
x++;
y--;
}
return(true);
}
public static int Problem4(){
int pp = 0;
for (int i=999;i>100;i--){
for (int j=999;j>100;j--){
pp = i*j;
if (isPalindrome(pp)){
return(pp);
}
}
}
return(pp);
}
我已经用许多其他数字测试了 isPalindrome,以确保它正常运行。为什么它没有捕捉到答案?我正在向后迭代,所以它应该首先得到最大的回文......
<小时/>已解决: 我只需要通过在最后返回并更改变量 a 的值以确保它是最高的回文来确保循环能够达到最高的回文数。
public static int Problem4(){
int pp = 0;
int a = 0;
for (int i=100;i<1000;i++){
for (int j=100;j<1000;j++){
pp = i*j;
if (isPalindrome(pp)){
if (pp>a){
a = pp;
}
}
}
}
return(a);
}
最佳答案
如果添加如下打印语句:
if (isPalindrome(pp)) {
System.out.format("i = %d, j = %d%n", i, j);
return (pp);
}
你得到的结果是:
i = 995, j = 583
580085
因此,您的程序永远不会达到 993 * 913
。
关于java - 欧拉项目 4 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26089316/