当前位置: 代码迷 >> 综合 >> 【51nod-1130】 N的阶乘的长度 V2(斯特林近似)
  详细解决方案

【51nod-1130】 N的阶乘的长度 V2(斯特林近似)

热度:19   发布时间:2023-12-06 19:42:02.0

输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。

 收起

输入

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)

输出

共T行,输出对应的阶乘的长度。

输入样例

3
4
5
6

输出样例

2
3
3

思路:

斯特林公式的形式:

或更精确的

斯特林公式的应用。

注意结果很大会爆Int,需要开longlong

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pi acos(-1.0)
using namespace std;int main() 
{int n,t;cin>>t;while(t--){scanf("%d",&n);if(n==1)cout<<1<<endl;else{double ans=0.5*log10(2*n*pi)+n*(log10(n)-log10(exp(1.0)));printf("%lld\n",(ll)(ans+1));} }return 0 ;
}