输入N即可算N位阶乘和。
程序代码:
#define L5 100000
#define N 1001 //想算大一些的N位把这里改成N+1,我试了下算到1000!没问题。
#include<stdio.h>
static num[N][L5];
void BigFac(int n);
int main(void)
{
int tp, n, bt, ap;
scanf("%d", &n);
for(tp = n; tp > 0; tp--)
BigFac(tp);
for(ap = 2; ap <= n; ap++)
{
for(bt = 1; bt-1 <= *num[ap-1]; bt++)
{
num[ap][bt] += num[ap-1][bt];
tp = num[ap][bt] / L5;
num[ap][bt] %= L5;
num[ap][bt+1] += tp;
}
}
printf("%d", num[n][(*num[n])--]);
for(;*num[n]>0;--*num[n])
printf("%05d",num[n][*num[n]]);
printf("\n");
}
void BigFac(int n)
{
long tpnum;
int i, j, add = 0;
num[n][0] = num[n][1] = 1;
for(i = 2; i <= n; i++)
{
for(j = 1; j <= *num[n]; j++)
{
tpnum = num[n][j]*i + add;
num[n][j] = tpnum % L5;
add = tpnum / L5;
}
while(add)
{
num[n][++(*num[n])] = add % L5;
add /= L5;
}
}
}
是我写的,没有考虑效率,硬乘的,VC6 或CFREE4.1 编译通过。
[
本帖最后由 playmyself 于 2010-2-1 14:39 编辑 ]