一个数如果恰好等于它的因子之和,这个数就称为"完数"。编程序找出1000之内的所有完数 C++

2016-06-16 18:10:26  分类: c++程序设计第三版谭浩强课后答案  参与:

 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are

 以下是此题的【c++源代码】,需要【c源代码】请点击进入

方法1 【c++源代码】

#include <iostream>
using namespace std;
 int main()
 {const int m=1000;       // 定义寻找范围
  int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
  int i,a,n,s;
  for (a=2;a<=m;a++)      // a是2~1000之间的整数,检查它是否为完数
   {n=0;                  // n用来累计a的因子的个数
    s=a;                  // s用来存放尚未求出的因子之和,开始时等于a
     for (i=1;i<a;i++)    // 检查i是否为a的因子
       if (a%i==0)        // 如果i是a的因子
 {n++;                 // n加1,表示新找到一个因子
  s=s-i;               // s减去已找到的因子,s的新值是尚未求出的因子之和
  switch(n)            // 将找到的因子赋给k1,...,k10
   {case 1:
       k1=i;  break;   // 找出的笫1个因子赋给k1
    case 2:
       k2=i;  break;   // 找出的笫2个因子赋给k2
    case 3:
       k3=i;  break;   // 找出的笫3个因子赋给k3
    case 4:
       k4=i;  break;   // 找出的笫4个因子赋给k4
    case 5:
       k5=i;  break;   // 找出的笫5个因子赋给k5
    case 6:
       k6=i;  break;    // 找出的笫6个因子赋给k6
    case 7:
       k7=i;  break;   // 找出的笫7个因子赋给k7
    case 8:
       k8=i;  break;    // 找出的笫8个因子赋给k8
    case 9:
       k9=i;  break;   // 找出的笫9个因子赋给k9
    case 10:
       k10=i;  break;   // 找出的笫10个因子赋给k10
   }
 }
    if (s==0)              // s=0表示全部因子都已找到了
     {cout<<a<<" is a 完数"<<endl;
   cout<<"its factors are:";
      if (n>1)  cout<<k1<<","<<k2;    // n>1表示a至少有2个因子
      if (n>2)  cout<<","<<k3; // n>2表示至少有3个因子,故应再输出一个因子
      if (n>3)  cout<<","<<k4; // n>3表示至少有4个因子,故应再输出一个因子
      if (n>4)  cout<<","<<k5;        //  以下类似
      if (n>5)  cout<<","<<k6;        
      if (n>6)  cout<<","<<k7;        
      if (n>7) cout<<","<<k8;        
      if (n>8) cout<<","<<k9;        
      if (n>9) cout<<","<<k10;        
      cout<<endl<<endl;
    }
   }
  return 0;
 }



方法2 【c++源代码】
#include <iostream>
using namespace std;
 int main()
  {int m,s,i;
   for (m=2;m<1000;m++)
    {s=0;
     for (i=1;i<m;i++)
       if ((m%i)==0) s=s+i;
     if(s==m)
      {cout<<m<<" is a完数"<<endl;
    cout<<"its factors are:";
       for (i=1;i<m;i++)
        if (m%i==0)  cout<<i<<" ";
       cout<<endl;
      }
    }
   return 0;
 }

方法3 用数组方法 【c++源代码】
#include <iostream>
using namespace std;
int main()
  {int k[11];
   int i,a,n,s;
   for (a=2;a<=1000;a++)
   {n=0;
    s=a;
    for (i=1;i<a;i++)
     if ((a%i)==0)
       {n++;
        s=s-i;
        k[n]=i;           // 将找到的因子赋给k[1]┅k[10]
       }
   if (s==0)
    {cout<<a<<" is a 完数"<<endl;
     cout<<"its factors are:";
     for (i=1;i<n;i++)
       cout<<k[i]<<" ";
     cout<<k[n]<<endl;
     }
   }
   return 0;
}
 
 

来源:c++程序设计第三版谭浩强课后答案

本文链接:http://www.wb98.com/cjia/post/cjia_3.20.html


本站文章搜索:

<< 上一篇下一篇 >>

搜索

Tags列表

赞助商链接