具有正确限制的无限循环

infinite for loop with correct limits

你能解释一下为什么这段代码会进入无限循环吗?我找不到错误。它在 n 和 m 的小值下工作正常。

#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long n=1000000, m=1000000;
    long long k = 1;

    for (long long i = 0; i < n; i++)
    {
        for (long long j = 0; j < m; j++)
        {
            k++;
        }

    }

    cout << k;

    return 0;
}

它不是无限的,但是 k++ 操作必须 运行 1,000,000 * 1,000,000 = 1,000,000,000,000 次。它不是无限的,但它需要太长时间。这正是它适用于较小的 n 和 m 值的原因。

这是一个典型的优化目标。

  1. 使用 -Ofast 构建。
g++ t_duration.cpp -Ofast -std=c++11 -o a_fast

#time ./a_fast
1000000000001
real    0m0.002s
user    0m0.000s
sys     0m0.002s

几乎没有时间return输出。

  1. 使用 -O1 构建。
 g++ t_duration.cpp -O1 -std=c++11 -o a_1


 #./a_1
419774 ms

完成计算大约需要 420 秒。

当我 运行 这段代码时,我得到了这个作为我的输出

1000000000001

参考:我在代码 chef IDE(https://www.codechef.com/ide) 中有 运行 这段代码 你可以试试这个 IDE 一次,我猜你的 IDE 有问题 或者可能是其他问题

我花了不到 20 秒的时间 运行 这个(时钟)

但是当我在 CODE::BLOCKS 中放入相同的代码时它需要很长时间(就像你说的无限循环 运行ning)并且原因很简单它应该做 1000000000000 运行小号

然而这给我带来了一个问题,code chef IDE 和 code::blocks compiler 之间有什么区别 (从你的问题中得到一个新问题 (Difference Between Code-Chef IDE and Code::Blocks))

最后答案是用code chef试一下IDE就这样了,这段代码运行s fast there

希望对您有所帮助