我知道我的isPalindrome方法的工作,因为当我在906609插上它返回true,我知道,在某些时候我Problem4方法乘以993和913一起,这将产生906609,但由于某些原因,它一直等待,直到580085返回号码。我究竟做错了什么?我只是无法得到它的工作:(项目欧拉4 Java的
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);
}
我想你'isPalindrome()'方法过于复杂。 – BitNinja 2014-09-28 20:32:42
是的,它几乎是巴洛克式编码的杰作。 – 2014-09-28 20:39:19
这是'isPalindrome'的“显而易见的”实现方式:“String s = String.valueOf(n); for(int i = 0,j = s.length() - 1; i <= j; i ++,j--)if(s.charAt(i)!= s.charAt(j))return false;返回true;' – 2014-09-28 20:44:00