项目Euler#5 - 为什么在循环结束时赢得了这个?

时间:2017-06-09 04:47:50

标签: c++ performance loops math while-loop

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

我的猜测是它与正确数字的长度(232792560)有关,因为如果我将要求降低一点(从9到8本身),则while循环设法完成。 / p>

    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;

1 个答案:

答案 0 :(得分:2)

您必须将div_counter重置为1而不是0

您的for循环仅从220,所以如果div_counter0开始,则可以达到19的最大值<UserControl ... DataContext="{dxmvvm:ViewModelSource Type=local:MyViewModel}"> }}