ZCMU 1129: 第五章:一不小心愛上你(斯特林公式)

1129: 第五章:一不小心愛上你

Description
O型血的人大多數是行動派,鄭微更是將這個特徵發揮到了極致。次日上課,阮阮前所未有地發現她在課堂上奮筆疾書,大爲驚訝,便湊過去問了一聲,“在寫什麼呀?”鄭微大大方方地向阮阮展示了她一早上的智慧結晶,阮阮看了看,“俘虜陳孝正詳細行動攻略……”她唸完,頓時無語。挺漂亮的一本嶄新小本本,上面已經洋洋灑灑地寫了將近十頁,蠅頭小字,字字工整,各個環節、各個步驟無一不詳,關鍵地方和注意事項甚至還用下劃線標了出來。

行動攻略第一條:在自習教室偶遇陳孝正,鄭薇坐在了他的後面,假裝不知道,問了他一個數學問題:你知道520的階乘有多少位麼?但是,陳孝正卻根本沒有理睬鄭薇。。

這個問題的答案,你知道麼?趕緊想好了,如果哪天有人來問你。。。。。。

Input
每行一個N,0<=N<10^7,你要快速回答哦!

Output
輸出N的階乘的位數。

Sample Input

5
6
520

Sample Output

3
3
1189

HINT
他在這些傳言裏每天照常晨練,照常上課,照常自習,照常生活,照常獨來獨往,從不刻意躲閃別人的眼神,也不刻意澄清,只是淡漠地,彷彿他們說着的是別人的故事,只不過在遠遠看到鄭微時,掉頭的腳步更快了。但鄭微並不害怕他的迴避,一個學校能有多大,有心找一個人總能找到,何況是他這樣生活規律的傢伙。鄭微沒有真正經歷過愛情,她不知道別人的愛情是怎麼樣的,她只有憑着自己的直覺,傾盡所能地去靠近她愛的那個男孩。

題解
斯特林公式是用來求階層的近似值
斯特林公式可以用來估算某數的大小,結合lg可以估算某數的位數,或者可以估算某數的階乘是另一個數的倍數。
整數n的位數爲
[lgn]+1
在這裏插入圖片描述
可以看出斯特林公式的作用,上式左邊n!會爆,而下邊的每一項都不會爆long long,因爲取了對數。這樣就可以算出位數了。

cmath庫裏對數函數用法,log10(x)是取以10爲底的對數,log(x)是取以e爲底的對數。

下面代碼用了換底公式,避免了不知道e的準確值。
在這裏插入圖片描述
最後的公式:(int )(log10(2nPi)/2+n*log10(n/e)+1)
Code:

#include <bits/stdc++.h>
using namespace std;
const double Pi = acos(-1);
const double e = exp(1);
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        if(n==0||n==1)
            printf("1\n");
        else
        printf("%d\n",(int )(log10(2*n*Pi)/2+n*log10(n/e)+1));
    }
    return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章