题目链接:http://poj.org/problem?id=1423
这道题是阶乘的应用,如果知道公式就很好写完全就是考公式而已,刚好现在正在学算法导论看到了斯特林公式
应用公式再用c++中的对数函数就能得到阶乘的结果的位数
c++中自然对数函数:log(N)
以10为底:log10(N)
但没有以2为底的函数但是可以用换底公式解决:log2(N)=log10(N)/log10(2)
代码:
#include <iostream>
#include <math.h>
#define PI 3.1415926
using namespace std;
int main()
{
int num = 0;
int x;
int count = 0;
cin>>count;
for(int i=0;i < count;i++)
{
x = 1;
cin>>num;
x += (int)(0.5*log10(2*PI*num)+num*log10((double)num)-num/log(10.0));
cout<<x<<endl;
}
return 0;
}