我正在研究 Problem 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
并导致负数和无限循环(?)。
在这种情况下,您可以通过对 x 使用 long
来解决问题。
关于C# - for 循环以奇怪的间隔卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183456/