您的位置:首页 > 其它

HDU 2212 DFS

2016-08-26 15:12 288 查看


DFS

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 7698    Accepted Submission(s): 4716


Problem Description

A DFS(digital factorial sum) number is found by summing the factorial of every digit of a positive integer. 

For example ,consider the positive integer 145 = 1!+4!+5!, so it's a DFS number.

Now you should find out all the DFS numbers in the range of int( [1, 2147483647] ).

There is no input for this problem. Output all the DFS numbers in increasing order. The first 2 lines of the output are shown below.

 

Input

no input

 

Output

Output all the DFS number in increasing order.

 

Sample Output

1
2
......

 

Author

zjt

没营养的题,我本来以为是DFS呢,结果0.0.你开始小编一开始天真的认为,for循环循环到2147483647直接就是超时,然后优化了一下,2147483647总共有十位,9的阶乘是362880。如果十位数都是9的话这个和也只有3628800.所以循环时只需要循环到7位数。目测循环到3628800就行哈。代码如下,我循环到9999999

#include <stdio.h>

int main()
{
int a[10]={1,1,2,6,24,120,720,5040,40320,362880};
long long sum,i,tmp;

for(i=1;i<=9999999;i++)
{
tmp=i;
sum=0;
while(tmp)
{
sum+=a[tmp%10];
tmp=tmp/10;

}
if(sum==i)
printf("%I64d\n",i);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: