C++第4次实验(基础班)—循环结构程序设计(参考答案)-项目4:输出完数

  1. #include <iostream>  
  2. #include<cmath>  
  3. using namespace std;  
  4. int main( )  
  5. {  
  6.   int i,s,j;  
  7.   cout<<"2-1000之间的完数有:";  
  8.   for(i=2;i<=1000;i++)  
  9.   {  
  10.     s=1; //1是任何数的因子,所以不再s=1,也使下一句可以从2开始  
  11.     for(j=2;j<sqrt(i);j++)   //正因为j从2开始,才让j到sqrt(i)  
  12.       if(i%j==0) s+=(j+i/j);  //加上j的同时,和j对称的那个因子(i/j)也被累加了  
  13.                              //思考:如果j允许从1开始,上式会将i本身也累加上去  
  14.     if(i==s) cout<<i<<"  ";  
  15.   }  
  16.   cout<<endl;  
  17.   return 0;  
  18. }  

下面的程序也可以求解,考虑了效率,但不够彻底。

[cpp]  view plain  copy
 print ?
  1. #include <iostream>  
  2. using namespace std;  
  3. int main( )  
  4. {  
  5.     int i,s,j;  
  6.     cout<<"2-1000之间的完数有:";  
  7.     for(i=2;i<=1000;i++)  
  8.     {  
  9.         s=1;   
  10.         for(j=2;j<=i/2;j++)     
  11.             if(i%j==0) s+=j;    
  12.         if(i==s) cout<<i<<"  ";  
  13.     }  
  14.     cout<<endl;  
  15.     return 0;  
  16. }  

猜你喜欢

转载自blog.csdn.net/macrohui2017/article/details/71192483