51nod 1130 斯特林公式

    斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特林公式十分好用,而且,即使在n很小的时候,斯特林公式的取值已经十分准确。

所以(long)(log10(sqrt(2.0*acos(-1.0)*n))+n*(log10(n)-log10(exp(1.0)))+1)就可以求出n!的长度了。当然n=1是需要特判下。

 

 

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <math.h>
 4 #define ll long long
 5 using namespace std;
 6 
 7 int main(){
 8     int n,t;
 9     scanf("%d",&t);
10     while(t--){
11         scanf("%d",&n);
12         ll x = (ll)(log10(sqrt(2.0*acos(-1.0)*n))+n*(log10(n)-log10(exp(1.0)))+1);
13         if(n==1)x++;
14         cout << x << endl;
15     }
16     return 0;
17 }

 

posted @ 2017-07-18 15:25  starry_sky  阅读(294)  评论(0编辑  收藏  举报