首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-02-24 
【再谈阶乘的近似解】HDU 1018——Big Number题目链接:点击打开链接求某数阶乘的位数。网上比较流行的方法是取

【再谈阶乘的近似解】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;}



热点排行