2017-01-30 34 views
0

問題是要找到最小甚至數,它是圖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

設置i = 1的原因是因爲提示說我必須從1開始。 –

回答

0

您的布爾表達式是錯誤的。當任何條件爲真時,你需要循環,因爲它必須在i%17 == 0,i%32 == 0或sqrt(i)< = 120時結束。否定是or'd表達式。

2

i%17!=0 && i%32!=0 && sqrt(i)<120這裏是問題所在。你停止條件應該是:

,而(它是(整除17 整除18 其根源超過120))。

這等於:

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

甚至更​​短的使用Demorgan Law

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

答案是

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

不要使用循環進行簡單的數學題

0

爲了提高效率,您應該從17 & 32的LCM開始,即544,然後繼續工作,而不是從1開始。