题意:
输入一个整数,求它的阶乘的十进制位数。
题目链接:
(http://acm.hdu.edu.cn/showproblem.php?pid=1018)
分析:
方法一:
该题目是求lgN!。可分解如下:
lg(N!) = lg(N(N-1)!) = lg(N) + lg((N-1)!) 则:
lg(N!) = lg(N) + lg(N-1) + … + lg(1)
位数= log10(1) + log10(2) + log10(3) + …… + log10(n) 取整数部分后+1
c++代码如下:
#include <iostream>
#include<cmath>
using namespace std;
int solve(int n)
{
double num=0;
for(int i=1;i<=n;i++)
num+=log10(i);
return (int)num+1;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int k;
cin>>k;
cout<<solve(k)<<endl;
}
}
方法二:
斯特林公式:
所以其位数应该可以表示为: log10(2*pi*n)/2+n*log10(n/e)+1