首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler #3超出整数范围( java )

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

Stack Overflow用户
提问于 2015-01-13 13:46:56
回答 3查看 515关注 0票数 0

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

代码语言:javascript
复制
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,因为我试图测试为什么我的代码不能正常工作。

代码语言:javascript
复制
System.out.println(checkFactors(13195));

工程并返回"29“。

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

"600851475143的int类型超出了范围“。

代码语言:javascript
复制
System.out.println(checkFactors(600851475143.0));

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-13 14:01:01

600851475143 of type int is out of range

  • 这个数字比int存储的要大。将.0附加到数字后,将该数字转换为可以表示该数字的double
  • 而不是.0,您可以执行checkFactors(600851475143d),以确保数字是双的,而不是int的
票数 2
EN

Stack Overflow用户

发布于 2015-01-13 13:58:31

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

票数 1
EN

Stack Overflow用户

发布于 2015-01-13 13:59:45

尝试将您的参数返回到long,并使字母L后,您的大数字后,像这个600851475143L,我认为它会工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27923619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档