题目
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! = 1
for(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;
}