wxjeacen@wxjeacen-laptop:~/linux/test_c++$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000 //要计算的N
#define P 10000
long s[N]={1,1},t,a,b;
void factorial(long s[],long n)
{
int i;
s[0]=1;s[1]=1;
t=2,a=1,b=0;
for(i=2;i<N;s[i]=0,++i);
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%P,b/=P;
}
void add(long sum[],long s[])
{
int i;
for( i=1;i<=s[0];++i)
if((sum[i]+=s[i])>9999) {sum[i]%=10000,sum[i+1]++;}
}
int main()
{
time_t start,end;
int i=2;
start=clock();
long sum[N]={1,1};
for(;i<=N;factorial(s,i),add(sum,s),++i);
printf("%d",sum[s[0]]);
for(i=s[0]-1;i>0;printf("%04d",sum[i]),--i);
end=clock();
printf("\nTime : %f s\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
return 0;
}
wxjeacen@wxjeacen-laptop:~/linux/test_c++$
给你添加了的求时间的。
wxjeacen@wxjeacen-laptop:~/linux/test_c++$ ./test
402790050531223457680670558292183044930441094551528966419334642920075902370082550849878938011122874840322664395727767319128483846892726398968790560901035018977865543415443376965144616549510538851077440410165819782073475583082079396504111380884916810768467471317168913183948275897490803646698793846190852594417739671786914563472162093180956284720843607311204509397095907530114810381703803860648328656344389023077975647748628886817466804724858587747840936784462436173977429991182753207302348016538494642001301432395279726745538178727708503090870745742249581124437084158031806471602854863650302741825130214652788342621283870175833906572656890104432413095171095723550851047360182700817666447833450097928957386876271765554137407111747666512309980678539886786878262902584539118231519316835523885400137767203426696953126303292828224235349134630280084480064650497764755473824102259453127730077777531063115138764952527597098445380046443997540925880086936317933421768424925084707414812932329166745886234137226923024813461900363225999464524935227947647167947434411637139203517404371214232998239493954562323327076903915931443305369962856388265027346155623332543302943446674383336900484885947609695640139797208838438493998636482572950930777919644406154624084228042985270573774543689565298092301062689807689071120317578510142181892798247199071452022029172707400688758980305702923813291544851703914211657597582497807598793035565731652297925769886549168450867091163868402442018371341022143349040941897422377931540131712376088451926646802255265721820332564453961091792448710886674897251899281432897966817352381951694370184383299109654078410356489144960977274480320655205474842571310858767154579079644215514199003832599232631020684528203955813111140473074686810426051322892063650122841004997271652977702547274337834459757112850838135183696311712170990224739928697694772853140476802033735594574707189941820656793611572800671948131128109558012358679446259496244143021997936801273888393102412918463505832701613704464047394891693567824946365095976820092895872874833067345472399549213736568277881574159120670765215962463587184455433922702506813953637742383768964226648365610070168839324749896910992390804658988479107678562550844858514512762455637677863067821690083222834405613388709119188719479181528190836888908152845729021513491658586509889455613570273121541638995145894561079999213500076101248781500642979091198044736325729107144579768273776743716439557581557253878204647391176582851167312182026188795156620056856503340092247479478684738621107994804323593105039052556442336528920420940313
Time : 2.150000 s