当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,