输入格式:输入第一行为一个正整数 n(1<=n<=25000)。输出格式:输出 n!的位数。
输入示例:10 输出示例:7
//log10(2*pi*n)/2 + n*log10(n/e) + 1
#include <bits/stdc++.h>
#define PI 3.141592654
#define E 2.71828182846
using namespace std;
int main(){
int n;cin>>n;int result;
result=log10(2*PI*n)/2+n*log10(n/E)+1;
cout<<result;return 0;
}
考察斯特林公式。
斯特林公式(Stirling’s approximation)是一条用来取n的阶乘的近似值的数学公式。
当需要为某些极大的n求阶乘时,由于阶乘的计算复杂度为线性,常见的方法可能变得不可接受。斯特林公式能够将求解阶乘的复杂度降低到对数级,极大地提高了计算效率。
即使在n较小的时候,斯特林公式的取值也已经十分准确,与准确值的误差极小。因此,在需要估计n!的值时,使用斯特林公式通常足够满足要求。
5万+

被折叠的 条评论
为什么被折叠?



