问题是找到可以被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;
}
答案 0 :(得分:2)
i%17!=0 && i%32!=0 && sqrt(i)<120
这是问题所在。你的停止条件应该是:
while(不(可被17整除 AND 可被18整除
这等于:
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开始。