首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Euler N# 8 JAVA项目

Euler N# 8 JAVA项目
EN

Stack Overflow用户
提问于 2015-06-25 04:55:18
回答 2查看 77关注 0票数 0

我试图解决这个问题,我认为我在正确的轨道上,但出于某种原因,程序没有在特定的条件下运行。这是代码:

代码语言:javascript
复制
public class Eight {
    public static void main(String[] args) {
        String set = "731671765313306249192251196744265747423"
                + "553491949349698352031277450632623957831801698"
                + "480186947885184385861560789112949495459501737958"
                + "331952853208805511125406987471585238630507156932909"
                + "632952274430435576689664895044524452316173185640309871"
                + "112172238311362229893423380308135336276614282806444486645"
                + "238749303589072962904915604407723907138105158593079608"
                + "66701724271218839987979087922749219016997208880937"
                + "7665727333001053367881220235421809751254540594752"
                + "243525849077116705560136048395864467063244157221"
                + "55397536978179778461740649551492908625693219784"
                + "686224828397224137565705605749026140797296865"
                + "241453510047482166370484403199890008895243450"
                + "6585412275886668811642717147992444292823086346567481391912316282458617866458"
                + "3591245665294765456828489128831426076900422421902267105562632111110937054421750694165"
                + "8960408071984038509624554443629812309878799272442849091888458015616609791913387549920052"
                + "4063689912560717606058861164671094050775410022569831552000559357297257163626956188267042"
                + "8252483600823257530420752963450";

        int initialIndex = 0;
        int lastIndex = 4;
        int finale = 0;

        for (;last <= set.length() - 1; initialIndex++, lastIndex++)
        {
            int num = Integer.parseInt(set.substring(initialIndex, lastIndex));
            int result = 1;

            while (num > 0)
            { 
                int digit = num % 10;
                result *= digit;
                num /= 10;
            }

            if (result > finale) 
                finale = result;
        } //end for 

        System.out.println(finale);
    }
}

当lastIndex =4时,我得到的结果是5832,这与Project给出的结果相同。但是当我试图用13个数字而不是4个来运行这个程序时,我得到了一个异常,程序没有运行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-25 05:03:14

13位字符串将超过int的最大允许大小。使用Long.parseLong并将numint更改为long。我做到了,当我使用13位数时,得到了以下结果: 2091059712

票数 3
EN

Stack Overflow用户

发布于 2015-06-25 05:03:59

你的问题从这里开始:

代码语言:javascript
复制
            int num = Integer.parseInt(set.substring(initialIndex, lastIndex));

当您将lastIndex设置为13时,尝试从字符串中取出的数字是7,316,717,653,133。在您的代码中,您试图将该String解析为一个int,其最大值为2^31 2,147,483,647。

您可以通过使任何期望excede 2^31的变量成为不同的积分数据类型(如long )来解决问题。

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

https://stackoverflow.com/questions/31041486

复制
相关文章

相似问题

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