杭电1018阶乘位数
Posted weeping
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电1018阶乘位数相关的知识,希望对你有一定的参考价值。
斯特灵公式是一条用来取n阶乘近似值的数学公式。一般来说,当n很大的时候,n阶乘的计算量十分大,所以斯特灵公式十分好用,而且,即使在n很小的时候,斯特灵公式的取值已经十分准确:
用Stirling公式计算n!结果的位数时,可以两边取对数,得: log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
故n!的位数为 log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)
代码:floor(log10(sqrt(2*PI*N))+N*log10(N/e))+1;
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <queue> #include <stack> #include <map> #include <vector> #define PI acos((double)-1) #define E exp(double(1)) using namespace std; int main (void) { int n,ans,t; cin>>t; while(t--) { scanf("%d",&n); ans = floor(log10(sqrt(2*PI*n))+n*log10(n/E)) + 1; cout<<ans<<endl; } return 0; }
以上是关于杭电1018阶乘位数的主要内容,如果未能解决你的问题,请参考以下文章