题目链接:HDU2212
#include<stdio.h>
int factorial(int i)
{
int pro=1;
while(i>0)
{
pro*=i;
i--;
}
return pro;
}
int main()
{
int n=1;
//while(n!=2147483647+1)用原数必定超时
/*逆向思维各个位上阶乘的和 是最大是9*9!
这样999999999
9个9 最大的各个位上的阶乘的和3265920=9*9*/
while(n!=362880)
{
int i=n;
int sum=0;
while(i!=0)
{
sum+=factorial(i%10);
i/=10;//因为i是int型,如i=1时÷10等于0.1会转化成0整形
}
if(sum==n)
printf("%d\n",n);
n++;
}
return 0;
}
或者用以上方法循环出结果后直接打表速度更快
#include<stdio.h>
int main()
{
printf("1\n2\n145\n40585\n");
}