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("\n"); 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("\n"); 21 } 22 } 23 return 0; 24 }