HDU2212 DFS【水题】【打表】

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;
}




你可能感兴趣的:(HDU2212 DFS【水题】【打表】)