[阶乘]hdu 1018 Big Number


题意就是求一个数的阶乘的位数!

先给一代码比较短,易懂 的

#include 
#include 
#include 
int main()
{
    int n,m,i;
    double sum;
    scanf("%d",&n);
    while(n--)
    {
        sum=0;
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        sum+=log10(i);
        printf("%dn",(int)sum+1);
    }
    return 0;
}

这是最简单的方法,但是耗时长,406ms。

好吧!我们换个方法:

这需要组合数学的知识。log10(n!) = log10(sqrt(2 * pi * n)) + n * log10(n / e)

#include 
#include 
#define PI 3.14159265
int n;
int num,ans;
void solve()
{
    double t;
    int i;
    t = (num*log(num) - num + 0.5*log(2*num*PI))/log(10);
    ans = t+1;
    printf("%d/n",ans);
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
            scanf("%d",&num);
            solve();
        }
    }
    return 0;
}

发表评论