HDU 1018——Big Number
求某数阶乘的位数。网上比较流行的方法是取对数后硬算,卡时而过,还是有些取巧成分的。
正解可能是数论中的斯特林估算阶乘法(来源为WIKI):
对这个公式取对数,可以快速得到位数,另外在比赛中进行快速估算也是比较方便的。
[cpp
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
const double PI=acos(-1);
const double e=exp(1);
int main()
{
int testcase;
cin>>testcase;
while(testcase--)
{
int n;
cin>>n;
double res;
if(n==1 || n==0)
{
cout<<"1"<<endl;
}
else
{
res=log10(sqrt(2*PI*n))+n*log10(n/e);//斯特灵公式
cout<<setiosflags(ios::fixed)<<setprecision(0)<<ceil(res)<<endl;
}
}
return 0;
}
补充:软件开发 , C++ ,