2012-03-14 4 views
0

왜 출력물을 위해 palindromes를 얻지 못하는지 이해할 수 없습니다. 나는 내부 루프에 문제가 있다는 의혹을 가지고있다. 그러나 나는 모든 입력에 감사 할 것이다.Project Euler 4에 대한 Palindrome 제품 출력

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

당신은하지 StringBuilders 그래서 더

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

StringBuilder

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

에 방법 체인을 변경하려면 palindromeCandidate 방법에 문자열을 비교해야하기 때문에 sb1.reverse() 방법은 역을 수행 한 후 자체를 반환 .

0

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

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

와 교체 참고 : 또한 같은 문자열을 포함하는 루프

1
  1. StringBuilder의 말에 continue 필요하지 않습니다 같지 않으므로 반환하는 문자열을 비교해야합니다.

    return palindromCandidate.equals(new StringBuilder(palindromeCandidate).reverse().toString()); 
    
  2. 나는 내 buissness의 비 알고 있지만,이 수수께끼를 해결하기 위해 매우 비싼 방법입니다. 나는 당신이 더 수학적 해결책을 생각해 보길 권합니다.

+0

+1 : 가장 작은 숫자 대신 큰 숫자로 시작하십시오. ;) –

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

이 하나를 시도 할 수 있습니다. 팔린 도롬이란 기능이 있습니다. 그것은 숫자가 palindrome인지 확인합니다. 내 주요 기능. 나는 for 루프와 문제의 내부 루프를 실행하여 문제가 지시 될 때 1000 개 미만의 두 제품을 얻는다. 그런 다음 결과가 회문 (palindrome)인지 여부를 확인한 후 회문 정렬 원 (palindrome 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; 
} 
관련 문제