2014-02-11 2 views
-1

문제점 : Project Euler Problem 41 다음은 전체 프로그램입니다. 내 질문은 한 문장의 코드입니다. 문장 1 (if(str.charAt(i)=='0'){return false;}) 은하지 포함 경우Java : Project Euler 41 : Pandigital prime

public class Practice { 
public static void main(String[] args) { 
    for(double i=7654321;i>1234566;i-=2){ 
     if(isUnique(i)){ 
      if(isPrime(i)){ 
        System.out.println(i); 
        break; 
      } 
     } 
    } 
    for(double i=4321;i>1233;i-=2){ 
     if(isUnique(i)){ 
      if(isPrime(i)){ 
        System.out.println(i); 
        break; 
      } 
     } 
    } 
} 

static boolean isUnique(double num){ 
    String str = String.valueOf(num); 
    for(int i=0;i<str.length();i++){ 
     if(str.charAt(i)=='9'){return false;} 
     if(str.charAt(i)=='8'){return false;} 
     if(str.charAt(i)=='0'){return false;} //<---***Sentence 1*** 
    } 
    for(int i=0;i<str.length()-1;i++){ 
     for(int j=i;j<str.length()-1;j++){ 
      if(str.charAt(i)==str.charAt(j+1)){return false;} 
     } 
    } 
    return true; 
} 

static boolean isPrime(double num){ 
    for(double i=3;i<=num/2;i+=2){ 
     if(num%i==0){return false;} 
    } 
    return true; 
} 

}

내가 올바른 대답을 얻었다. 문장 1이 포함되면 프로그램은 즉시 종료됩니다. 왜?

답변

0

당신이 double을 사용하고 있기 때문에, 모든 String들 모두가 즉시 isUnique() 통화를 종료하는 0를 포함하는 형태

7654321.0 

에 있습니다. 대신 int을 사용하면 소수를 조사하는 것이 더 적합합니다. 디버거를 사용하는 경우

+1

또는 필요하면 길어? –

0

당신은 당신의 매개 변수 double num의 값이 7654321.0

.0이 방법은 종료됩니다 것을 볼 수 있습니다. 해결책 : double을 사용하지 말고 long 또는 int를 사용하십시오.