感谢雨中飞燕分享,原文地址:http://blog.pfan.cn/yzfy
#include
#define N 1000 //要计算的N
long
s[N]={1,1},n=N,t=2,a=1,b=0;
int main()//雨中飞燕之作
{
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%10000,b/=10000;
for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);
return 0;
}
在
VC6,DevC,Code::Block上测试,算1000!用时毫秒级
最少字节数版本(从long定义变量开始计算共155字节,不
计算换行)
#include //雨中飞燕之作
#define
N 1000 //要计算的N
long s[N]={1},n=10000,t=2,a,b,m;main(){
for(;a<=m||++t<=N&&(a=b=0,1);m==a++&&b&&m++)
s[a]=(b+=s[a]*t)%n,b/=n;
for(printf("%d",s[m]);m--;)printf("%04d",s[m]);}
阅读(1375) | 评论(0) | 转发(0) |