C# - for 循环以奇怪的间隔卡住

标签 c# for-loop random freeze

我正在研究 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/

相关文章:

mysql - SQL从数据库中拉取随机图像

Python 不太难,只是在变量方面遇到困难

c# - 如何按运行总数对对象列表进行分组?

c# - OutputDataReceived(和 ErrorDataReceived)的发射率很慢,会创建一个大缓冲区

javascript - 你可以使用 for 循环递减条件吗

javascript - 三元运算符中的多项操作

python - 在 python 中运行 for 循环有限迭代

java - 二维 ArrayList 初始化行

c# - DataGridView 导航到下一行

c# - 线程 : allow one thread to access data while blocking others, 然后停止阻塞的线程执行相同的代码