题目大意: 给你一个数的大小为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
#include
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-02-14 16:52  cchun  阅读(406)  评论(0编辑  收藏  举报