/************************************************************************/
/* 求n(n<100)的階乘 */
/* 用數組a存放結果其中數組的每一位存放一位數,a[0]存放當前結果的位數 */
/************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 1000
/*已知 (n-1)!在數組a中, 求k! -------把(n-1)!再加上n-1次 */
void Factorial(int *a ,int n)
{
int* b;
int i,j,r;
int m=a[0];
int carry=0;
b=(int*)malloc(sizeof(int)*(m+1));
if(!b)
{
printf("malloc memory Error!/n");
exit(0);
}
for(i=1; i<=m; i++)
{
b[i]=a[i];
}
for(j=1; j<n; j++)
{
for(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;
}
carry=0;
}
free(b);
a[0]=m;
}
/*輸出結果 */
void PrintResult(int *a, int n)
{
int i;
printf("%4d!=",n);
for(i=a[0]; i>0; i-- )
{
printf("%d",a[i]);
}
printf("/n");
}
int main()
{
int a[MAX];
int n,k;
printf("please input the number: /n");
scanf("%d",&n);
a[0]=1;
a[1]=1;
PrintResult(a,1);
for(k=2; k<=n; k++)
{
Factorial(a,k);
PrintResult(a,k);
}
getch();
return 0;
}