我不明白为什么我的输出没有得到回文。我怀疑它有问题在于内部for循环,但我会感激任何输入。
/*
*
* A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
*
* Find the largest palindrome made from the product of two 3-digit numbers.
*
*/
public class projecteuler4 {
public static boolean isPalindrome(String palindromeCandidate) {
StringBuilder sb1 = new StringBuilder(palindromeCandidate);
if (sb1.equals(sb1.reverse()))
return true;
else
return false;
}
public static void main(String[] args) {
String answer;
for (int i = 100; i <= 999; i++) {
for (int j = i; j <= 999; j++) {
int ans = i * j;
answer = Integer.toString(ans);
if(isPalindrome(answer)) {
System.out.println(answer);
}
else
continue;
}
}
}
答案 0 :(得分:1)
StringBuilder
不相等,因此您需要比较从它们返回的字符串:
return palindromCandidate.equals(new StringBuilder(palindromeCandidate).reverse().toString());
我知道这不是我的意思,但这是解决这个谜语的一种非常昂贵的方式。我建议你考虑更多的数学解决方案。
答案 1 :(得分:0)
您需要比较palindromeCandidate方法中的字符串而不是StringBuilders,以便进一步更改
if (sb1.equals(sb1.reverse()))
return true;
else
return false;
到
return palindromeCandidate.equals(sb1.reverse().toString());
StringBuilder
方法链,因此sb1.reverse()
方法在执行反向后返回自身。
答案 2 :(得分:0)
替换
if (sb1.equals(sb1.reverse()))
与
if (sb1.toString().equals(sb1.reverse().toString()))
注意:您在循环结束时也不需要continue
答案 3 :(得分:0)
你可以尝试这样......
public class LargestPolindrome {
static List<Integer> polindromes = new ArrayList<Integer>();
/**
* @param args
*/
public static void main(final String[] args) {
int polindrome = 0;
for (int i = 999; i > 1; i--) {
for (int j = 999; j > 1; j--) {
polindrome = i * j;
if (isPolindrome(polindrome)) {
polindromes.add(polindrome);
}
}
}
Collections.sort(polindromes);
System.out.println(polindromes.get(polindromes.size() - 1));
}
public static boolean isPolindrome(final Integer num) {
final int rer = Integer.valueOf(new StringBuilder(num.toString()).reverse().toString());
return rer == num;
}
}
答案 4 :(得分:0)
你可以尝试这个。有一个函数isPallindrome。它检查一个数字是否是回文。在我的主要功能。我已经运行了for循环和问题的内部循环,以便在问题指示时获得少于1000的两个产品。然后,我检查过,如果结果是回文,它将被添加到回文arraylist。最后,我从arraylist输出最大值。
public static void main(String[] args) {
// TODO code application logic here
long result = 0;
List<Long> palindrome = new ArrayList<Long>();
for(int i = 0; i < 1000; i++){
for(int j = 0; j < 1000; j++){
result = i*j;
if(isPallindrome(result)){
palindrome.add(result);
}
}
}
long i = Collections.max(palindrome);
System.out.println(i);
}
public static boolean isPallindrome(long n){
long pallindrome = n;
long reverse = 0;
while(pallindrome!=0){
long remainder = pallindrome % 10;
reverse = reverse * 10 + remainder;
pallindrome = pallindrome / 10;
}
if(n == reverse){
return true;
}
return false;
}