第一次见到这么搞笑的题:
因为满足条件 in the range of int( [1, 2147483647] ). 的答案,就只有四个。
所以可以,
#include<stdio.h>
int a[10];
void init()
{
long long temp=1;
for(int i=1;i<=9;i++)
{
temp*=i;
a[i]=temp;
}
a[0]=1;
}
int solve(long long i)
{
long long temp =i;
long long sum=0;
while(temp)
{
int x = temp%10;
sum+=a[x];
temp=temp/10;
}
if(sum==i) return 1;
else return 0;
}
int main()
{
init();
for(long long i=1;i<=2147483647;i++)
{
if(solve(i)==1) printf("%I64d
",i);
}
return 0;
}
用上面的代码算出答案后,用下面的代码submit
#include<stdio.h>
int main(){
printf("1
2
145
40585
");
return 0;
}
也可以把main()里面的循环范围改小一些,只要能输出那四个数就OK了。。。。。
但是还是得说一下,这道题的提交代码很简单,但是却不是那么好写。
一开始我还没有想到原来打表求出前九个数的阶乘就可以了,愚昧。。。