【发布时间】:2014-09-28 20:28:30
【问题描述】:
我知道我的 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);
}
【问题讨论】:
-
我认为您的
isPalindrome()方法过于复杂。 -
是的,这几乎是巴洛克编码的杰作。
-
这是
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; return true;
标签: java palindrome