UVa 623 - 500
UVa 623 - 500!
题目:大整数阶乘计算。
分析:简单题、模拟。大数计算,可以采用位数压缩,节约时间空间。把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; }