有这样一个求n!的方法可是我对pnext()函数不懂啊,请高手指点下
/*
本程序对给定的n(n<=100),计算出输出k!(k=1,2,...,n)的全部有效数字,因k!的值可能很大,故采用一维数组存储计算结果。设数组的每个元素存储k!的一位数字,并约定从低位到高位依次存于数组的第一个位置,第二个位置···。
程序中,计算k!采用对已求得的(k-1)!的结果连续加k-1次后求出,例如,4!=24,则计算5!对原来的24累加4次后得到120。为了控制累加的位数,另引入整型变量c用于记录当前(k-1)!的位数。
*/
#include <stdio.h>
#define MAXN 1000
int a[MAXN], b[MAXN];
void pnext(int k, int *cp)
{
int c = *cp, i, m, r;
for (i = 0; i < c; i++)
b[i] = a[i];
a[c] = 0;
for (m = 1; m < k; m++)
for (i = 0; i < c; i++) {
r = a[i] + b[i];
a[i] = r % 10;
a[i + 1] += r / 10;
}
r = a[c];
while (r > 0) {
a[c++] = r % 10;
r = r / 10;
}
*cp = c;
}
void write(int *a, int k, int c)
{
int i;
printf("%4d! = ", k);
for (i = c - 1; i >= 0; i--)
printf("%d", a[i]);
printf("\n\n");
}
main()
{
int n, c, k;
printf("Enter the number n(<=100):");
scanf("%d", &n);
a[0] = 1;
c = 1;
write(a, 1, c);
for (k = 2; k <= n; k++) {
pnext(k, &c);
write(a, k, c);
getchar();
}
}