杭电1018阶乘位数

Posted weeping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电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;
}

以上是关于杭电1018阶乘位数的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1018Big Number(大数的阶乘的位数,利用公式)

acm编程题:hdu1018,hdu1019

HDU_1018_Big number

HDU 1018 Big Number

HDU 1018 Big Number

51nod 1058 N的阶乘的长度 位数公式