求解:一个数如果恰好等于它的因子之和,这个数就称为“完数”
1 /*
2 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
3 找出1000以内的所有完数。
4 */
5 #include <stdio.h>
6
7 int main()
8 {
9 int tmp=0,s,j,elem[10],k=0;
10
11 for(tmp=0; tmp<10; tmp++)
12 {
13 elem[tmp]=0;
14 }
15
16 for(tmp=2; tmp<1000; tmp++)//经典10 0例里从2开始的。
17 {
18 //n=-1;
19 s=tmp;k=0;
20 for(j=1; j<=tmp; j++)
21 {
22 //if(s==0)
23 // break;
24
25 if((tmp%j)==0)
26 {
27 //n++;
28 s-=j;
29 elem[k++] = j;
30 //printf("Q");
31 }
32 }
33
34 if(s==0)
35 {
36 printf("%d is a wanshu:",tmp);
37 j=0;
38 while(j<k)
39 {
40 printf("%d,",elem[j]);
41 elem[j]=0;
42 j++;
43 //printf("Q");
44 }
45 printf("\n");
46 }
47 printf("%d\n",tmp);
48 system("pause");
49 // printf("\n\n");
50 }
51
52 return 0;
53 }
2 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
3 找出1000以内的所有完数。
4 */
5 #include <stdio.h>
6
7 int main()
8 {
9 int tmp=0,s,j,elem[10],k=0;
10
11 for(tmp=0; tmp<10; tmp++)
12 {
13 elem[tmp]=0;
14 }
15
16 for(tmp=2; tmp<1000; tmp++)//经典10 0例里从2开始的。
17 {
18 //n=-1;
19 s=tmp;k=0;
20 for(j=1; j<=tmp; j++)
21 {
22 //if(s==0)
23 // break;
24
25 if((tmp%j)==0)
26 {
27 //n++;
28 s-=j;
29 elem[k++] = j;
30 //printf("Q");
31 }
32 }
33
34 if(s==0)
35 {
36 printf("%d is a wanshu:",tmp);
37 j=0;
38 while(j<k)
39 {
40 printf("%d,",elem[j]);
41 elem[j]=0;
42 j++;
43 //printf("Q");
44 }
45 printf("\n");
46 }
47 printf("%d\n",tmp);
48 system("pause");
49 // printf("\n\n");
50 }
51
52 return 0;
53 }
出了一个问题,怎么会从59变到30的:
//int elem[10];//正确
int main()
{
int tmp=0,s,j,k=0,elem[10];//错误
//static int elem[10]; //正确
I don't know why ?