题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1018
刚做数学题,发现自己的数学能力果断不行,还是慢慢积累吧。
思路:把n!的求出来然后再求位数肯定不行的,既然是数学题,就有数学方法,具体用log就可以了
例如:n!的位数 = log(n!) + 1 = log(1 * 2 * ……* n) + 1 = log(1) + log(2) + ……+log(n) + 1
一个循环就可以了。
其实也有公式的,但是本人不会,那个公式好像叫 斯特林公式。
代码:
#include <cstdio>
#include <cmath>
int main()
{
int n;
int _;
scanf("%d",&_);
while(_--){
scanf("%d",&n);
double ans = 1;
for(int i = 1;i <= n;++i)
ans += log10(i * 1.0);
printf("%d\n",(int)ans);
}
return 0;
}