2012-03-14 59 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; 
}