题目大意:
        给你一个数的大小为n, 1 ≤ n ≤ 10^7,求它的阶乘的位数。
解题思路:
        暴力是不可能了,数能够达到10^7,暴力出来的数,数组都放不下。
        其实有一个公式叫斯特林公式,
        result=(long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1);

       其中,该公式不适用于n=1的情况,所以n=1时要另外考虑。
代码:

#include<iostream>
#include<cmath>
using namespace std;
int main(void)
{
    int cas;
    scanf("%d", &cas);
    while(cas--)
    {
        int n;
        __int64 ans;
        scanf("%d", &n);
        if(n == 1)
        {
            printf("1\n");
            continue;
        }
        ans = (__int64)((log10(sqrt(4.0 * acos(0.0) * n)) + (double)n * (log10((double)n) - log10(exp(1.0)))) + 1);
        printf("%I64d\n", ans);
    }
    return 0;
}

posted on 2012-08-03 02:12  cchun  阅读(180)  评论(0编辑  收藏  举报