为什么该计划失败了很长的数字?

时间:2015-03-20 10:15:10

标签: java

我写了这段代码,你输入任何整数,它会给你那个整数的最小素数。 但真的很长的数字似乎都失败了。 为什么会这样,我该如何解决?

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");        
        }
    }
}

3 个答案:

答案 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()读取这样的数字。

如果您需要阅读大于长的数字,请查看使用BigIntegerScanner.nextBigInteger()

答案 1 :(得分:0)

Long / Int当然具有最大值。如果要使用高于此值的数字,请使用BigInteger(从扫描仪读取字符串,然后从中创建新的BigInteger)。

答案 2 :(得分:0)

使用sc.nextLong();获取Long变量。