项目Euler#3超出整数范围java

时间:2015-01-13 13:46:57

标签: java integer arithmeticexception

该代码应该回馈最大的素数。 有关此任务的更多信息,请访问:https://projecteuler.net/problem=3

int checkFactors(double na) {

        long n = (long) na;
        int biggestPrimeFactor = 0;
        for (int i = 1; i < n; i++)
            if (n % i == 0 && isPrimFaktor(i) && i > biggestPrimeFactor)
                biggestPrimeFactor = i;

        return biggestPrimeFactor;
    }

boolean isPrimeFactor(int n) {

        int length= 0;
        for (int i = n; i > 0; i--)
            if (n % i == 0)
                length++;

        if (length== 2)
            return true;
        return false;
    }

我决定将checkFactors()的参数设为double,因为我试图测试为什么我的代码无法正常工作。

System.out.println(checkFactors(13195));

工作并返回“29”。

然而,System.out.println(checkFactors(600851475143)); 不起作用,

“int类型的600851475143超出范围”。

System.out.println(checkFactors(600851475143.0));

确实编译但在几秒钟之后给我一个ArithmeticException。

3 个答案:

答案 0 :(得分:2)

600851475143 of type int is out of range

  • 此数字大于int可存储的数字。在号码上附加.0会将号码转换为double,其中可以代表该号码
  • 而不是.0你可以做checkFactors(600851475143d),确保数字是双倍而不是int

答案 1 :(得分:1)

使用long作为na和bigPrimeFactor的数据类型。这些值太大,无法存储在int变量中。

答案 2 :(得分:1)

尝试将您的参数恢复为long并在您的大号L之后填写600851475143L字母,我认为它会起作用