计算 n! 的程序
#include "stdio.h"
#include "malloc.h"
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[1000],n,k; //计算出来的结果应该小于1000位
printf("input");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();
}
//scanf("%d",&n);
getchar();
}
#include "malloc.h"
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[1000],n,k; //计算出来的结果应该小于1000位
printf("input");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();
}
//scanf("%d",&n);
getchar();
}