刚好写过一个这样的.改N就可以了.基本可以秒出.
#include <stdio.h>
#include <stdlib.h>
#define N 20
//要计算的N
#define P 10000
long s[N]={1,1},a=1,b=0;
void factorial(long s[],long n)
{
for(;a<=*s;)
{
b+=s[a]*n;
s[a]=b%P;
b/=P;
if((*s==a)&&b)
(*s)++;
++a;
}
b=0,a=1;
}
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()
{
int i=2;
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);
putchar('\n');
system("pause");
return 0;
}