DFS




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


Total Submission(s): 5692    Accepted Submission(s): 3520



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


题目大意:求范围 [1, 2147483647] 内,各个位上数字的阶乘和等于其本身的数。

思路:先写一个程序,计算 [1, 2147483647] 上,每个数的各个位上数字的阶乘和,

找到等于其本身的数,将其输出出来,然后打表就可以了。



//计算程序
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

int jc(int N)
{
int num = 1;
for(int i = 1; i <= N; ++i)
num *= i;
return num;
}
int main()
{
for(int i = 1; i <= 2147483647; ++i)
{
int num = i,sum = 0;
while(num)
{
sum += jc(num%10);
num /= 10;
}
if(sum == i)
cout << i << " ";
}

return 0;
}

打表程序:


#include<iostream>
using namespace std;

int main()
{
cout << 1 << endl;
cout << 2 << endl;
cout << 145 << endl;
cout << 40585 << endl;
return 0;
}