大数阶乘N!(N<=1000)

大数阶乘N!(N<=1000)

    模拟大数乘法,将结果的每5位存在数组a[]中,以提高运算速度。
 1  #include < iostream >
 2  const   int  N  =   100000 ;
 3  int  main(){
 4       int  i,j,n,a[ 10000 ];
 5       while (scanf( " %d " , & n) != EOF){
 6          memset(a, 0 , sizeof (a));
 7           for (a[ 0 ] = j = 1 ;j <= n;j ++ ){
 8               for (i = 0 ;i < 10000 ;i ++ ) a[i] *= j;
 9               for (i = 0 ;i <9999 ;i ++ )
10                   if (a[i] >= N ){
11                      a[i + 1 ] += a[i] / N;
12                      a[i] %= N;
13                  }
14          }
15           for (i = 9999 ;i >= 0 ;i -- )
16               if (a[i])  break ;
17          printf( " %d " ,a[i]);
18           for (j = i - 1 ;j >= 0 ;j -- ) printf( " %05d " ,a[j]);
19          printf( " \n " );
20      }
21       return   0 ;
22  }

你可能感兴趣的:(大数阶乘N!(N<=1000))