天天看點

斯特林公式應用

​​51nod1058​​

這題讓求n的階乘長度,n範圍到1e6,很明顯會爆long long,那麼就需要一個公式直接算出結果–斯特林公式,這個公式的作用就是求n階乘的近似值。

斯特林公式應用

我們知道求一個十進制數x的位數,log10(x) + 1,

用斯特林公式帶入x,兩邊取對數

斯特林公式應用

可以看出斯特林公式的作用,上式左邊n!會爆,而右邊的每一項都不會爆long long,因為取了對數。這樣就可以算出位數了。

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define d(x) cout << (x) << endl
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
const double PI = 3.1415926;


int n;

int main()
{
    scanf("%d", &n);
    int pos = int((0.5 * log(2 * PI * n) + n * (log(n) - 1)) / log(10));
    printf("%d\n", pos + 1);
    return 0;
}