当前位置: 代码迷 >> 综合 >> hdu 2212 Digital Factorial Sum
  详细解决方案

hdu 2212 Digital Factorial Sum

热度:42   发布时间:2023-12-16 06:06:23.0

题目

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