用一个数组保存该位置是否是自私数, generat递归函数推导从1->10000的所有数,但是当碰到self[i]该位置的值已经为1时,就不用继续递归
下去了,因为之前的数已经推导过了
Code
1#include <stdio.h>
2#include <math.h>
3#include <string.h>
4#define SIZE 10003
5
6void generat(int num,int *self)
7{
8 int tmp=num;
9 int i=1;
10 while(num>0)
11 {
12 tmp+=num%10;
13 num=num/10;
14 }
15 if(tmp<10000&&self[tmp]!=1)
16 {
17 self[tmp]=1;
18 generat(tmp,self);
19 }
20 else
21 return;
22}
23
24int main()
25{
26 int self[SIZE];
27 memset(self,0,sizeof(self));
28 for(int i=1;i<SIZE;i++)
29 generat(i,self);
30 for(int i=1;i<10000;i++)
31 {
32 if(self[i]==0)
33 printf("%d\n",i);
34 }
35 return 0;
36}
1#include <stdio.h>
2#include <math.h>
3#include <string.h>
4#define SIZE 10003
5
6void generat(int num,int *self)
7{
8 int tmp=num;
9 int i=1;
10 while(num>0)
11 {
12 tmp+=num%10;
13 num=num/10;
14 }
15 if(tmp<10000&&self[tmp]!=1)
16 {
17 self[tmp]=1;
18 generat(tmp,self);
19 }
20 else
21 return;
22}
23
24int main()
25{
26 int self[SIZE];
27 memset(self,0,sizeof(self));
28 for(int i=1;i<SIZE;i++)
29 generat(i,self);
30 for(int i=1;i<10000;i++)
31 {
32 if(self[i]==0)
33 printf("%d\n",i);
34 }
35 return 0;
36}