小编典典

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

java

该代码应该返回最大的质数。有关此任务的更多信息: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()的参数加倍,因为我试图测试为什么我的代码无法正常工作。

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

工作并返回“ 29”。

但是,System.out.println(checkFactors(600851475143)); 不起作用,

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

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

确实可以编译,但是在几秒钟后给了我ArithmeticException。


阅读 192

收藏
2020-11-30

共1个答案

小编典典

600851475143 of type int is out of range

  • 此数字大于int可存储的数字。附加.0到数字转换的数目成double 代表该数字
  • 而不是.0可以checkFactors(600851475143d)确保数字是双精度而不是整数的方法
2020-11-30