我写了这段代码,你输入任何整数,它会给你那个整数的最小素数。 但真的很长的数字似乎都失败了。 为什么会这样,我该如何解决?
import java.util.Scanner;
public class ExThree {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number: ");
long num = sc.nextInt();
boolean isPrime = false ;
long prime;
if(num>0){
for(prime=2; prime<num && !isPrime; prime=prime+1){
if(num%prime==0){
isPrime=true;
}
}
if(prime==num){
prime=prime+1;
}
System.out.println(prime-1);
}
else{
System.out.println("bad input");
}
}
}
答案 0 :(得分:1)
long num = sc.nextInt();
您正在调用返回int的nextInt()
,因此对于太大而无法存储在int中的数字,它将失败。 Java int的最大值为2147483647,因此对于这样的数字,nextInt()
将失败。
Scanner.nextLong()
返回一个long,其最大值为9,223,372,036,854,775,807。这大于您的样本输入562,612,851,654,168。所以你应该能够使用nextLong()
读取这样的数字。
如果您需要阅读大于长的数字,请查看使用BigInteger
和Scanner.nextBigInteger()
。
答案 1 :(得分:0)
Long / Int当然具有最大值。如果要使用高于此值的数字,请使用BigInteger(从扫描仪读取字符串,然后从中创建新的BigInteger)。
答案 2 :(得分:0)
使用sc.nextLong();
获取Long变量。