这是针对项目欧拉问题14的。
当数字为偶数时,应该将数字除以2,但是当数字为奇数时,请将其乘以3并加1。最终它应该达到一个。
我的任务是找到需要最多步骤数才能达到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
上升到如此之高的价值缠绕成底片!
一旦进行了更改,您的算法就可以正常工作。(我测试过)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句