【问题标题】:Project Euler #3 out of integer range java [duplicate]项目 Euler #3 超出整数范围 java [重复]
【发布时间】:2015-01-13 13:46:56
【问题描述】:

代码应该返回最大的素数。 更多关于这里的任务: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)); 没用,

“600851475143 int 类型超出范围”。

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

编译但几秒钟后给我一个 ArithmeticException。

【问题讨论】:

标签: java integer arithmeticexception


【解决方案1】:

600851475143 of type int is out of range

  • 此数字大于int 可以存储的数量。将.0 附加到数字后会将数字转换为double可以代表该数字
  • 您可以使用checkFactors(600851475143d) 代替.0,以确保数字是双精度而不是整数

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试着把你的参数改回long,然后像600851475143L这样在你的大数之后写信L,我认为它会起作用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-14
        • 1970-01-01
        • 2020-03-22
        • 2021-11-13
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多