编程语言
首页 > 编程语言> > 欧拉计画14 Java

欧拉计画14 Java

作者:互联网

我在Problem 14 on Project Euler上遇到了麻烦.我不明白为什么我的代码(Java)无法正常工作,我们将不胜感激.

public class Calculate {

    public static void main(String[] args){
        System.out.println(calc());
    }

    public static int calc(){
        int max = 0;
        int maxI = 0;
        for (int i = 0; i < 1000000; i++){
            if (seqLen(i) >= max){
                max = seqLen(i);
                maxI = i;
            }
        }
        return maxI;
    }

    public static int seqLen(int seed){
        if (seed <= 0) return 0;
        if (seed == 1) return 1;
        int len = 1;
        if (seed % 2 == 0){
            len += seqLen(seed/2);
        }
        else{
            len += seqLen((3*seed)+1);
        }
        return len;
    }

}

谢谢!

解决方法:

您的int变量溢出.

在该计算中(使用蛮力方法时)出现的最大数量为56991483520.

Java的int最大值为2 ^ 31-1 == 2147483647,显然较小.

因此,将变量等更改为使用较长时间.此处的最大值为2 ^ 63-1 == 9223372036854775807,将适合所有值.

标签:collatz,java,recursion
来源: https://codeday.me/bug/20191120/2045550.html