COJ 1067 求大数N的阶乘, 题目说要用链表实现,想了半天,哇塞,数组就是链表呀,我又晕了o(╯□╰)o

COJ 1067 求大数N的阶乘, 题目说要用链表实现,想了半天,哇塞,数组就是链表呀,我又晕了o(╯□╰)o
 1  #include  < cstdlib >
 2  #include  < iostream >
 3 
 4  using   namespace  std;
 5 
 6  int  main( int  argc,  char   * argv[])
 7  {
 8       long   long  a[ 20000 ],carry,i;
 9       int  n,j;    
10      
11       while (cin >> n)
12      {
13             
14           if (n == 0 )
15          cout << 1 << endl;
16           else
17          {    
18              memset(a, 0 , sizeof (a));
19               for (i = 1 ;i <= n;i ++ )
20              {
21                  carry = 0 ;
22                   if (i == 1 )
23                  {    
24                      a[ 0 ] = 1 ;a[ 1 ] = 1 ;
25                  }
26                   else
27                  {
28                      for (j = 1 ;j <= a[ 0 ];j ++
29                     {
30                          a[j] = i * a[j] + carry;
31                          carry  =  a[j] / 10 ;
32                          a[j] = a[j] % 10 ;                
33                     }
34                     
35  /* 处理最后一位的进位,我开始写为如下的形式,这种形式有严重的问题,如果N特别大,carry就有可能不是一位数,我试了了下,最大只能处理49的阶乘,遇到50的阶乘就会出错。 
36                     if(carry)
37                      {
38                          a[0]++;
39                           a[j]=carry;
40                       }                     
41  因为以上处理进位的方式不行,所以改为如下的处理进位的方式。 */
42                     
43                      while (carry)
44                      {
45                          a[ 0 ] ++ ;
46                          a[j] = carry % 10 ;
47                          carry /= 10 ;
48                          j ++ ;
49                      }                    
50                      
51                  }
52              }
53               for (i = a[ 0 ];i > 0 ;i -- )
54                  cout << a[i];
55              cout << endl;
56          }
57      }
58      
59      system( " PAUSE " );
60       return  EXIT_SUCCESS;
61  }
62 

你可能感兴趣的:(COJ 1067 求大数N的阶乘, 题目说要用链表实现,想了半天,哇塞,数组就是链表呀,我又晕了o(╯□╰)o)