这是针对项目欧拉问题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
变量而不是int
。 currentNum
如此之高,其值会变成负数!
一旦进行了更改,您的算法就可以正常工作。 (我测试过)