zoukankan      html  css  js  c++  java
  • 杭电1018阶乘位数

    斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用,而且,即使在n很小的时候,斯特灵公式的取值已经十分准确:

    用Stirling公式计算n!结果的位数时,可以两边取对数,得: log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
    故n!的位数为 log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)

         代码:floor(log10(sqrt(2*PI*N))+N*log10(N/e))+1;

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <queue>
    #include <stack>
    #include <map>
    #include <vector>
    
    #define PI acos((double)-1)
    #define E exp(double(1))
    using namespace std;
    
    int main (void)
    {
        int n,ans,t;
        cin>>t;
        while(t--)
        {
            scanf("%d",&n);
            ans = floor(log10(sqrt(2*PI*n))+n*log10(n/E)) + 1;
            cout<<ans<<endl;
        }
        return 0;
    }

    作者:weeping
    出处:www.cnblogs.com/weeping/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    感悟.
    近期感悟
    android 新建项目无法自动生成R文件
    重装后各种碰壁
    rhapsody
    libevent
    ui android需要解决的问题
    sql对xml的解析
    将datarow转换为实体的方法
    网页中的一些我不熟的东西
  • 原文地址:https://www.cnblogs.com/weeping/p/5351752.html
Copyright © 2011-2022 走看看