我知道我的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);
}发布于 2014-09-28 20:36:31
如果添加如下打印语句:
if (isPalindrome(pp)) {
System.out.format("i = %d, j = %d%n", i, j);
return (pp);
}你得到的结果:
i = 995, j = 583
580085所以,您的程序从未出现在993 * 913上。
https://stackoverflow.com/questions/26089316
复制相似问题