C语言 大数的阶乘

求400的阶乘

C/C++ code
#define N 400 long a[8916]={1,0},n,i,c,len; int main(void) { n=N; for ( len=1;n>1; n--) { for (c=0,i=0; i<len;i++ ) { a[i]= ( c+= a[i]*n ) % 10000; c/=10000; } ((a[i]=c)>0)?len++:0; } for( len--,printf("%d",a[len--]);len>=0; len--) printf("%04d",a[len]); return 0; }

 

【解释】

 for ( len=1;n>1; n--)     //把len的长度初始为1,因为数组中已经有一个元素了a[0]=1
 {
   for (c=0,i=0; i<len;i++ ) //c初始为0,一开始还没运算哪来的进位,这是个内层循环,数组a中的len
                          //个元素都必须参与运算,都必须*n,这就是下面a[i]*n的来由

     {
           a[i]= ( c+= a[i]*n ) % 10; c/=10;   //c是进位,不用说了,c+=a[i]*n,a每个元素与n
                                                //相乘必须考虑低位是否有进位,有就加起来
     }

   ((a[i]=c)>0)?len++:0;  //最后一个元素也有进位吗,有的话就在当前的元素的下个数组位置直接等于进位值,并
                          // 且数组的元素值 要加1,没有的话什么都不干 ,光一个0什么都不是
                   
  }

 


 

posted on 2011-08-24 19:03  香格里拉\(^o^)/  阅读(3544)  评论(0编辑  收藏  举报