Я знаю, что мой метод isPalindrome работает, потому что когда я подключаюсь к 906609, он возвращает true, и я знаю, что мой метод Problem4 в какой-то момент умножает 993 и 913 вместе, что дает 906609, но по какой-то причине он ждет до тех пор, пока 580085, чтобы вернуть номер. Что я делаю не так? Я просто не могу заставить его работать :(project euler 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
Да, это почти шедевр барочного кодирования. –
Вот как выглядит «очевидная» реализация '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)) возвращает false; return true; ' –