2012-03-14 61 views
0

我不明白为什么我没有得到我的输出回文。我怀疑它存在的问题在内循环,但我会很感激任何输入。项目欧拉回文产品4

/* 
* 
* 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

你需要在你的palindromeCandidate方法比较字符串不StringBuilders因此进一步改变

if (sb1.equals(sb1.reverse())) 
    return true; 
else 
    return false; 

return palindromeCandidate.equals(sb1.reverse().toString()); 

StringBuilder方法链,所以sb1.reverse()方法执行反向后返回自己。

0

更换

if (sb1.equals(sb1.reverse())) 

if (sb1.toString().equals(sb1.reverse().toString())) 

注意:您也不需要continue在循环

1
  1. StringBuilder s表示包含相同字符串的结尾不相等,所以你需要比较从它们返回的字符串:

    return palindromCandidate.equals(new StringBuilder(palindromeCandidate).reverse().toString()); 
    
  2. 我知道这是我的非的buissness,但是这是解决这个谜非常昂贵的方式。我建议你想一个更加数学的解决方案。

+0

+1:从最大的数字开始,而不是从最小的数字开始。 ;) – 2012-03-14 14:02:26

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; 
} 

} 
0

你可以试试这个。有一个函数isPallindrome。它检查一个数字是否是回文。在我的主要功能。我已经运行了一个for循环和一个问题的内部循环,以获得两个产品,该问题指示的数量少于1000。然后,我检查了,如果结果是回文,它会加到回文阵列列表中。最后,我输出了数组列表的最大值。

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; 
}