[恢]hdu 1042

2011-12-23 07:49:22

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1042

题意:算n!。最高10000。1w的时候n!有不超过4w位(Log10(10000^10000) = 40000)。

代码:

# include <stdio.h>
# define MOD 10000

int num[40000] ;


void mul(int n)
{
int i, cc = 0 ;
for (i = 1 ; i <= num[0] ; i++)
{
num[i] = num[i]*n + cc ;
cc = num[i] / MOD ;
num[i] %= MOD ;
}
while (cc)
{
num[1+num[0]++] = cc % MOD ;
cc /= MOD ;
}
}


void gao(int n)
{
int i ;
num[0] = num[1] = 1 ;
for (i = 2 ; i <= n ; i++)
mul(i) ;
}


void output ()
{
int i = num[0] ;
printf ("%d", num[i]) ;
for (i = num[0]-1 ; i >= 1 ; i--)
printf ("%04d", num[i]) ;
printf ("\n") ;
}


int main ()
{
int n ;
while (~scanf ("%d", &n))
{
gao(n) ;
output() ;
}
return 0 ;
}



posted @ 2012-01-06 23:29  Seraph2012  阅读(145)  评论(0编辑  收藏  举报