首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

UVa 623 - 500

2012-11-26 
UVa 623 - 500!题目:大整数阶乘计算。分析:简单题、模拟。大数计算,可以采用位数压缩,节约时间空间。把k位存入

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;}

热点排行