代码中的运行时错误,用于解决最小的甚至可整除

时间:2017-01-30 06:16:15

标签: c++

问题是找到可以被17和32整除的最小偶数,并且其平方根大于120。

此代码输出32显然不是真的。有人能发现我的错误吗?

#include <iostream>
#include <math.h>
#include <stdio.h>

using namespace std;

int main()
{
    int i = 1;
    if(i%2!=0){
        i++;
    }
    while(i%17!=0 && i%32!=0 && sqrt(i)<120){
        i+=2;
    }
    cout<<i<<endl;
}

4 个答案:

答案 0 :(得分:2)

i%17!=0 && i%32!=0 && sqrt(i)<120这是问题所在。你的停止条件应该是:

while((可被17整除 AND 可被18整除 AND 其根超过120)。

这等于:

while(!(i%17==0 && i%32==0 && sqrt(i)>120))

甚至更短时间使用Demorgan Law

while(i%17!=0 || i%32!=0 || sqrt(i)<=120)

答案 1 :(得分:0)

您的布尔表达式错误。你需要循环,而任何条件都是真的,因为它必须在i%17 == 0,i%32 == 0或sqrt(i)&lt; = 120时结束。否定这是一个或者&#39;表达。

答案 2 :(得分:0)

答案是

#include <math.h>       /* ceil */
#include <iostream>
int main ()
{
    std::cout<<ceil((120*120)/(32*17))*(32*17);
}

不要将循环用于简单的数学问题

答案 3 :(得分:0)

为了提高效率,您应该从17&amp;的LCM开始。 32,即544,然后向上工作,而不是从1开始。