题目:大整数阶乘计算。
分析:简单题、模拟。大数计算,可以采用位数压缩,节约时间空间。把k位存入一位,每次10^k进位即可,利用%0kd输出很方便。
注意:500!有2632位,位数开少会WA。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int ans[ 451 ];
int main()
{
int N;
while ( scanf("%d",&N) != EOF ) {
memset( ans, 0, sizeof(ans) );
ans[0] = 1;
for ( int i = 2 ; i <= N ; ++ i ) {
for ( int j = 0 ; j < 450 ; ++ j )
ans[j] *= i;
for ( int j = 0 ; j < 450 ; ++ j )
if ( ans[j] >= 1000000 ) {
ans[j+1] += ans[j]/1000000;
ans[ j ] %= 1000000;
}
}
int end = 450;
while ( end > 0 && !ans[end] ) -- end;
printf("%d!\n%d",N,ans[end --]);
while ( end >= 0 ) printf("%06d",ans[end --]);
printf("\n");
}
return 0;
}