[恢]hdu 1018

2011-12-15 05:44:21

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

题意:问n!有多少位。

mark:网上大部分是斯特林公式。

因为n!位数=log10(n!)+1,而log10(n!) = log10(1)+log10(2)+...+log10(n),亦勉强能解。1000ms的题跑900+ms,危险~。

代码:

# include <stdio.h>
# include <math.h>

/*
int calc(int nn)
{
double n = nn ;
double Pi = acos(-1) ;
int rtn = 1 +
log10(2*Pi*n) + n*(log10(n/exp(1))) ;
return rtn ;
}
*/


int calc(int n)
{
double sum = 0 ;
int i, rtn ;
if (n == 0 || n == 1) return 1 ;
for (i = 1 ; i <= n ;i++)
sum += log10(i) ;
return rtn = sum+1 ;
}


int main ()
{
int T, n ;
scanf ("%d", &T) ;
while (T--)
{
scanf ("%d", &n) ;
printf ("%d\n", calc(n)) ;
}
return 0 ;
}



posted @ 2012-01-06 15:50  Seraph2012  阅读(134)  评论(0编辑  收藏  举报