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 に答える