1316-Self Numbers

用一个数组保存该位置是否是自私数, generat递归函数推导从1->10000的所有数,但是当碰到self[i]该位置的值已经为1时,就不用继续递归
下去了,因为之前的数已经推导过了

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1#include <stdio.h>
 2#include <math.h>
 3#include <string.h>
 4#define SIZE 10003
 5
 6void generat(int num,int *self)
 7ExpandedBlockStart.gifContractedBlock.gif{
 8   int tmp=num;
 9   int i=1;
10   while(num>0)
11ExpandedSubBlockStart.gifContractedSubBlock.gif   {
12      tmp+=num%10;
13      num=num/10;
14   }

15   if(tmp<10000&&self[tmp]!=1)
16ExpandedSubBlockStart.gifContractedSubBlock.gif   {
17      self[tmp]=1;
18      generat(tmp,self);                           
19   }

20   else
21       return;
22}

23
24int main()
25ExpandedBlockStart.gifContractedBlock.gif{
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++)
31ExpandedSubBlockStart.gifContractedSubBlock.gif   {
32      if(self[i]==0)
33         printf("%d\n",i);
34   }

35   return 0;
36}

 

转载于:https://www.cnblogs.com/SoYoung/archive/2009/07/13/1522583.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值