题目
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.
输入
no input
输出
Output all the DFS number in increasing order.
样例输出
1
2
......
题目分析
本题求解在int范围内,找到各数位的阶乘之和等于原数值,并输出。在2亿的范围内查找过于巨大,但是我们如果把范围缩小到 8 × 9 ! + 2 ! 8\times9!+2! 8×9!+2!,就不会超时了。
代码
#include<iostream>
using namespace std;int a[10];
void factorial()
{
a[0]=1;// 0! = 1for(int i = 1;i<10;++i){
a[i]=1;for(int j = i;j>1;--j)a[i]*=j;}
}int main()
{
factorial();//n!int ans;int N = a[9]*8+a[2]*1;for(int i = 1;i<=N;++i){
int t = i;ans = 0;while(t != 0){
ans+=a[t%10];t/=10;}if(ans == i)printf("%d\n",ans);}return 0;
}
运算结果
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2212