代码改变世界

ACM常用代码--精度计算——大数阶乘

2011-03-12 14:10  Rollen Holt  阅读(934)  评论(0编辑  收藏  举报

1 精度计算--大数阶乘

语法:int result=factorial(int n);

参数:n:

n 的阶乘

返回值:

阶乘结果的位数

注意:

本程序直接输出n!的结果,需要返回结果请保留long a[]

需要 math.h

  1: int factorial(int n)
  2: {
  3: long a[10000];
  4: int i,j,l,c,m=0,w; 
  5: 
  6: a[0]=1; 
  7: for(i=1;i<=n;i++)
  8:     { 
  9:     c=0; 
 10:     for(j=0;j<=m;j++)
 11:         { 
 12:         a[j]=a[j]*i+c; 
 13:         c=a[j]/10000; 
 14:         a[j]=a[j]%10000; 
 15:     } 
 16:     if(c>0) {m++;a[m]=c;} 
 17: } 
 18: 
 19: w=m*4+log10(a[m])+1;
 20: printf("\n%ld",a[m]); 
 21: for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);
 22: return w;
 23: }
 24: