Java:Project Euler 41:Pandigital prime

时间:2014-02-11 14:30:12

标签: java primes

问题:Project Euler Problem 41 以下是完整的程序。我的问题是一段代码。

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 (if(str.charAt(i)=='0'){return false;})我得到了正确的答案 包含在内。如果包含第1句,则程序立即终止。为什么呢?

2 个答案:

答案 0 :(得分:0)

由于您使用的是double,所有String都在表单上

7654321.0

,其中包含0,立即结束isUnique()次来电。使用int代替调查素数更有意义。

答案 1 :(得分:0)

如果您使用调试器,则可以看到参数double num的值为7654321.0

.0导致方法终止。解决方案:不要使用double,而应使用long或int。