Big Number HDU - 1018 (斯特林公式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Miranda_ymz/article/details/83245948

Big Number HDU - 1018

分类:斯特林公式

题意:给你n问n!中有多少位数。

知识一:n的位数为(int)log10(n) +1.

知识二:斯特林公式:n!=sqrt(2*pi*n)(n/e)^n。

此题可以暴力也可以利用公式求解。公式求解为log10(n!)==n*(log10(n)-log10(e))+0.5*log10(2*n*pi)

(此外我使用公式时候错了好几次,原因是精度问题,pi和e的数位不够)

1)暴力

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        double ans=0;
        for(int i=1;i<=n;i++)
            ans+=log10(i);
        printf("%d\n",(int)ans+1);

    }
    return 0;
}

 2)斯特林公式

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
const double pi=3.1415926535897932385;
const double e=2.7182818284590452354;
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        double ans;
        ans=n*(log10(n)-log10(e))+0.5*log10(2*n*pi);
        printf("%d\n",(int)ans+1);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Miranda_ymz/article/details/83245948
今日推荐