我正在研究问题14在 Project Euler 上,我的代码似乎会以随机的间隔冻结,没有明显的原因。
static void Main()
{
int maxNum = 0;
int maxLength = 0;
for (int x = 2; x < 1000000; ++x)
{
int num = x;
int length = 0;
while (num != 1)
{
if (num % 2 == 0)
{
num /= 2;
length++;
}
else
{
num = (3 * num) + 1;
length++;
}
}
if (length > maxLength)
{
maxLength = length;
maxNum = x;
}
}
Console.WriteLine(maxNum);
Console.ReadLine();
每次运行程序时,程序挂起的数字都是不同的,并且似乎不遵循任何设定的模式。关于为什么它会像这样悬挂有任何想法吗?提前致谢。
我用另一种方式解决了这个问题,通过缓存每个步骤的结果,我发现了你的问题。我怀疑你的程序永远不会停止。
该声明num = (3 * num) + 1
可能会溢出Int32.MaxValue
并导致负数和无限循环(?)。
在这种情况下,您可以使用以下方法解决问题long
为了你的x。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)