HDU 2212 DFS

来源:互联网 发布:淘宝网名怎么修改 编辑:程序博客网 时间:2024/05/17 02:25
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
12......

各个位上阶乘的和 是最大是9*9!这样来求解。999999999   9个9 最大的各个位上的阶乘的和为3265920=9*9!

只需要遍历到上面这个数就可以了,不用遍历到21亿,否则会超时

#include<stdio.h>int a[11];int f(int n){int i,sum=1;for(i=1;i<=n;i++)sum*=i;return sum;}int main(){a[0]=1;int i,num,sum,p;for(i=1;i<=9;i++)a[i]=f(i);for(i=1;i<=300500;i++){num=i;sum=0;while(num){p=num%10;num/=10;sum+=a[p];}if(i==sum)printf("%d\n",i);}return 0;}


0 0
原创粉丝点击