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