由这题想到了n的阶乘..
拆解并分析了一下燕子的关于n的阶乘的算法,要不分开还真不是人看的...
是不是高手非要这么写才显出自己的水平啊?
#include<stdio.h>
#define N 1000
//要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0,p=10000;
int main()//雨中飞燕之作
{
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%p,b/=p;
for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);
return 0;
}
下面是被我拆开了的,应该容易看明白了..
#include <stdio.h>
#include <stdlib.h>
#define N 1000
//要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0,p=10000;
int temp;
int main()//雨中飞燕之作之拆解版
{
for(;;)
{
b+=s[a]*t;
s[a]=b%p;
b/=p;
if((*s==a)&&b)
(*s)++;
++a;
if(a>*s)
if(++t<=n) {b=0;a=1;}
else break;
}
printf("%d",s[*s]);
for(;--*s>0;)
printf("%04d",s[*s]);
system("pause");
return 0;
}