#include <stdio.h>
#include <malloc.h>
#define MAXN 1000
void pnext(int a[], int k)
{
int *b, m = a[0], i, j, r, carry;
b = (int *)malloc(sizeof(int) * (m + 1));
for (i = 1; i <= m; i++)
{
b[i] = a[i];
}
for (j = 1; j <= k; j++)
{
for (carry = 0, i = 1; i <= m; i++)
{
r = (i < a[0] ? a[i] + b[i] : a[i]) + carry;
a[i] = r % 10;
carry = r / 10;
}
if (carry)
{
a[++m] = carry;
}
}
free(b);
a[0] = m;
}
void write(int *a, int k)
{
int i;
printf("%4d! = ", k);
for (i = a[0]; i > 0; i--)
{
printf("%d", a[i]);
}
printf("\n\n");
}
void main()
{
int a[MAXN], n, k;
printf("Enter the number n: ");
scanf("%d", &n);
a[0] = 1;
a[1] = 1;
write(a, 1);
for (k = 2; k <= n; k++)
{
pnext(a, k);
write(a, k);
getchar();
}
}