您的位置:首页 > 其它

【再谈阶乘的近似解】HDU 1018——Big Number

2013-02-19 12:11 393 查看
题目链接:点击打开链接

求某数阶乘的位数。网上比较流行的方法是取对数后硬算,卡时而过,还是有些取巧成分的。

正解可能是数论中的斯特林估算阶乘法(来源为WIKI):



对这个公式取对数,可以快速得到位数,另外在比赛中进行快速估算也是比较方便的。

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: