计算 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();
}
posted @ 2004-10-15 14:34  观我生,君子无咎  阅读(751)  评论(0编辑  收藏  举报