C++ 欧拉5号项目-为什么获胜';这个循环不是结束了吗?

C++ 欧拉5号项目-为什么获胜';这个循环不是结束了吗?,c++,performance,loops,math,while-loop,C++,Performance,Loops,Math,While Loop,如果我将代码行“num++”更改为“num++=2520”,代码运行良好并返回正确的答案,但我想知道为什么它不能按原样运行,主要是因为在查找答案之前,我没有想到数字必须是2520的倍数,我不明白为什么我自己的代码在没有更改的情况下不能正确给出答案。在我看来,这似乎是正确的。不幸的是,while循环永远不会结束 我猜这与正确的数字(232792560)的长度有关,因为如果我将要求降低一点(从9降低到8),while循环就会成功完成 long long int num = 1; in

如果我将代码行“num++”更改为“num++=2520”,代码运行良好并返回正确的答案,但我想知道为什么它不能按原样运行,主要是因为在查找答案之前,我没有想到数字必须是2520的倍数,我不明白为什么我自己的代码在没有更改的情况下不能正确给出答案。在我看来,这似乎是正确的。不幸的是,while循环永远不会结束

我猜这与正确的数字(232792560)的长度有关,因为如果我将要求降低一点(从9降低到8),while循环就会成功完成

    long long int num = 1;
    int div_counter = 1;
    bool check = false;

while(!check)
{
    for(int i = 2; i < 21; i++)
    {
       if(num % i == 0)
       {
           div_counter++;
       }
    }
    if(div_counter == 20)
    {
        check = true;
    }
    else
    {
        num++;
        div_counter = 0;
    }
}

return num;
long int num=1;
int div_计数器=1;
布尔检查=假;
同时(!检查)
{
对于(int i=2;i<21;i++)
{
如果(num%i==0)
{
div_计数器++;
}
}
if(div_计数器==20)
{
检查=正确;
}
其他的
{
num++;
div_计数器=0;
}
}
返回num;

您必须将
div\u计数器
重置为
1
,而不是
0


您的
for
循环仅从
2
运行到
20
,因此,如果
div\u计数器从
0
开始,它可以达到的最大值是
19

为什么不直接将此数字构造为这些数字的LCM,使用GCD查找已包含的因素?您确定等待的时间足够长吗?如果2520变量在0.1秒内运行,则步骤1变量将需要252秒=4.2分钟。如果当前
num
是10000的倍数,您是否尝试调试打印当前
num?您是正确的,但我等待的时间不够长-它最终给出了正确的答案。非常感谢你!