ZqrFerrari
努力学习,开心生活

这个问题其实并不难,主要是要采用合理的数据结构。

我用的是数组,int mul[1000],并将每个元素限定在 unit = 100 即 100 进制。

效率的确是有待改进,不过除非你要算宇宙的大小,否则耗时可以忽略不计。

关键是简短易懂,可移植。 

 

代码
#include <stdio.h> 
 
#define UNIT 1000 
#define MUL 100000 
  
void factorial(long int n); 
 
 
int mul[MUL]; /* 每个元素规模为 UNIT,共 MUL 个,总共能储存 UNIT ^ MUL 规模数据 */  

 
int main()
 {
     FILE 
*fp = fopen("result.txt""w");
     
long int i, j;
     
     mul[
0= 1;
     factorial(
10000);
     
     
for(i=MUL-1; mul[i] == 0 && i>=0; i--);
    
     fprintf(fp, 
"%d e %ld\n", mul[i], i* 3);
     
     
for( ; i>=0; i--)
     {
         
if(mul[i] == 0
         {
             
for(j=UNIT; j/10 > 0; j/=10
                   fprintf(fp, 
"%d"0);
              
/*这里注意0的打印问题,数组某一项中如果存放的是00,那就应该显示两个0.  */
         }
         
else fprintf(fp, "%d", mul[i]);
     }
     getchar();
     fclose(fp);
     exit(
0);
}
 
void factorial(long int n)
 {
     
static long int k;
     
long int i;
     
     
if(n == 1return;
     
else
     {
         
for(k=MUL-1; mul[k] == 0 && k>=0; k--);
         
         
for(i=0; i<=k; i++)
             mul[i] 
*=  n;
             
         
for(i=0; i<=k; i++)
         {
             
if(mul[i] >= UNIT)
             {
                 mul[i
+1+= mul[i] / UNIT;
                 mul[i] 
%= UNIT;
             }
         }
         factorial(n
-1);
     }
}

 

 

posted on 2010-05-13 21:33  赵情融  阅读(281)  评论(0编辑  收藏  举报