这是针对项目欧拉问题14的。

当数字为偶数时,应将数字除以2,但是当数字为奇数时,应将其乘以3并加一。最终它应该达到一个。

我的任务是找到需要最多步骤数才能达到1的数字。

这是我的代码:

    int currentNum = 0;
    int iterator = 0;
    int[] largestChain = new int[]{0,0};
    for(int i = 10;i<=1000000;i++)
    {
        currentNum = i;
        iterator = 0;
        while(currentNum!=1)
        {
            iterator++;
            if(currentNum%2==0)
            {
                currentNum/=2;
            }
            else
            {
                currentNum = (currentNum*3)+1;
            }
        }
        if(iterator>largestChain[1])
        {
            largestChain[0] = i;
            largestChain[1] = iterator;
        }
    }

    System.out.println("largest iterator:"+largestChain[1]+"for num:"+largestChain[0]);


您能告诉我什么让它变慢吗? (现在花费的时间超过30分钟,但仍然没有找到答案)。

最佳答案

使用long变量而不是intcurrentNum如此之高,其值会变成负数!

一旦进行了更改,您的算法就可以正常工作。 (我测试过)

10-06 03:20