问题: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句,则程序立即终止。为什么呢?
答案 0 :(得分:0)
由于您使用的是double
,所有String
都在表单上
7654321.0
,其中包含0
,立即结束isUnique()
次来电。使用int
代替调查素数更有意义。
答案 1 :(得分:0)
如果您使用调试器,则可以看到参数double num
的值为7654321.0
.0
导致方法终止。解决方案:不要使用double,而应使用long或int。