题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1018
解题思路:
(1)题目就是求N!的位数,log10 求位数,可以变成log10(1)+log10(2)+log10(3)+。。。log10(N),用数组存一下已算过的值,10^7能过。
(2)大数据的情况,有个公式,从别人那里copy来的,不会推。 log10(n!) = log10(sqrt(2 * pi * n)) + n * log10(n / e)
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,t;
double Pi,E;
Pi=acos(-1.0);
E=exp(1.0);
cin >> t;
while(t--)
{
cin >> n;
int len;
len=log10l(sqrtl(2*Pi*n))+n*log10l(n/E)+1; // n>1的情况下成立
if (n==1) len=1;
cout << len << endl;
}
return 0;
}