18.求1000以内的完数

一个数如果恰好等于他的因字数之和,这个数就称为“完数”,例如,6的因子为1,2,3,而6=1+2+3,因此6是一个“完数”

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5     int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;
 6     int i,a,n,s;
 7     for(a=2; a<=1000; a++)  //a是2-1000之间的整数,检查它是否为完数
 8     {
 9         n = 0;  //用于累计a的因子个数
10         s = a;  //s用于存放尚未求出的因子之和,开始对时候等于a
11         for(i=1; i<a; i++)//检查i是否为a的因子
12             if(a%i==0)  //如果i是a的因子
13             {
14                 n++;     //n加1,表示新找到一个因子
15                 s = s-i;  //s减去已找到的因子,s的新值是尚未求出的因子数之和
16                 switch(n)  //将找到的因子赋给k1-k10
17                 {
18                 case 1:
19                     k1 = i;    //找到第一个因子赋给k1
20                     break;
21                 case 2:
22                     k2 = i;   //找出第2个因子赋给k2
23                     break;
24                 case 3:
25                     k3 = i;
26                     break;
27                 case 4:
28                     k4 = i;
29                     break;
30                 case 5:
31                     k5 = i;
32                     break;
33                 case 6:
34                     k6 = i;
35                     break;
36                 case 7:
37                     k7 = i;
38                     break;
39                 case 8:
40                     k8 = i;
41                     break;
42                 case 9:
43                     k9 = i;
44                     break;
45                 case 10:
46                     k10 = i;
47                     break;
48                 }
49             }
50         if(s==0)
51         {
52             printf("%d,Its factors are ",a);
53             if(n>1) printf("%d,%d",k1,k2);  //n>1表示a至少2个因子
54             if(n>2) printf(",%d",k3);       //n>2表示a至少3个因子,故应再输出一个因子
55             if(n>3) printf(",%d",k4);      //n>3表示a至少4个因子,故应再输出一个因子
56             if(n>4) printf(",%d",k5);
57             if(n>5) printf(",%d",k6);
58             if(n>6) printf(",%d",k7);
59             if(n>7) printf(",%d",k8);
60             if(n>8) printf(",%d",k9);
61             if(n>9) printf(",%d",k10);
62             printf("
");
63         }
64         }
65         return 0;
66 }
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5     int a,s,i;
 6     for(a=2;a<1000;a++)   //a是2-1000之间的整数,检查它是否为完数
 7     {
 8         s=0;              //s用于存放因字数之和,初始值为0
 9         for(i=1;i<a;i++)   //检查i是否为a的因子
10         {
11             if(a%i==0)      //如果i是a的因子
12                 s = s+i;    //s因字数相加
13         }
14         if(s==a)            //如果因字数之和等于该数
15         {
16             printf("%d,its factors are ",a);
17             for(i=1;i<a;i++)//依次输出因子数之和
18             if(a%i==0)
19             printf("%d",i);
20             printf("
");
21         }
22     }
23         return 0;
24 }
原文地址:https://www.cnblogs.com/spore/p/10334160.html