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 ?