码迷,mamicode.com
首页 > 其他好文 > 详细

杭电1018阶乘位数

时间:2016-04-04 13:14:51      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

斯特灵公式是一条用来取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阶乘位数

标签:

原文地址:http://www.cnblogs.com/weeping/p/5351752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!