读书人

【再谈阶乘的将近解】HDU 1018Big

发布时间: 2013-02-24 17:58:56 作者: rapoo

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

题目链接:点击打开链接

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

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

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

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

#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;}



读书人网 >编程

热点推荐