4

对于下面的代码,它会在“n”达到 100,000 左右时停止运行。我需要它运行到 100 万。我不知道哪里出了问题,我还在学习 Java,所以代码中也可能存在简单的错误。

 public class Problem14{
public static void main(String[] args) {
    int chainLength;
    int longestChain = 0;
    int startingNumber = 0;
    for(int n =2; n<=1000000; n++)
    {
        chainLength = getChain(n);
        if(chainLength > longestChain)
        {
            System.out.println("chainLength: "+chainLength+" start: "+n);
            longestChain = chainLength;
            startingNumber = n;
        }
    }

    System.out.println("longest:"+longestChain +" "+"start:"+startingNumber);
}
public static int getChain(int y)
{
    int count = 0;
    while(y != 1)
    {
        if((y%2) == 0)
        {
            y = y/2;
        }
        else{
            y = (3*y) + 1;
        }
        count = count + 1;
    }

    return count;   
}
}
4

3 回答 3

6

请使用long作为data type 代替 int

我希望这一点曝光,这个数字确实高于1000000,所以变量y需要long保持它。

于 2012-08-17T15:39:24.147 回答
5

这是y的数据类型。它应该很。否则它会环绕到 -20 亿。

我以为我认识到了这一点——这是欧拉问题 14。我自己做过。

于 2012-08-17T15:46:36.563 回答
1

getChain() 方法导致问题变为负数,然后它永远挂在循环中。

于 2012-08-17T15:49:10.930 回答