[恢]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 ;
}