题目意思
定义如果一个数的每位数上的阶乘和等于这个数,那么就称这个数为DFS数。例如145=1!+4!+5!,那么145就是一个DFS数。
现在要你输出区间【1~2147483647】的所有DFS数。
解题思路
我们可以发现这样的数肯定不会大于100000,那么我们就随意取一个大于100000的数作为上限,遍历1到这个上限的所有数,输出满足条件的数即可。
代码部分
#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=886250;
int a[10];
int main()
{
a[0]=1;
for(int i=1; i<10; i++)///计算1~9的阶乘
{
a[i]=a[i-1]*i;
}
for(int i=1; i<maxn; i++)
{
int ans=0;
int n=i;
while(n)
{
int t=n%10;
n=n/10;
ans+=a[t];
}
if(ans==i)
printf("%d\n",i);
}
return 0;
}