Skip to content

SP 5917题解

Published: at 04:06

题意

给定一个数 nn,求 n!n! 的位数。

思路

我们知道整数 nn 的位数的计算方法为 log10n\log_{10}{n} ,故 n!n! 的位数为 log10n!\log_{10}{n!}。如果要求出 n!n! 的具体值,计算会很慢。但是如果仅仅是求阶乘的位数,可以用斯特林公式解决。

斯特林公式:n!2×π×n×(ne)n!\approx \sqrt{2\times \pi \times n} \times\left ( \frac{n}{e} \right )

代码

#include<bits/stdc++.h>
using namespace std;
#define pi 3.141592653589793238462643
#define e 2.71828182845904523536
long long l(long long n){
    long long s=1;
    if (n>3){
    	s=log10(2*pi*n)/2+log10(n/e)*n+1;
	}    
    return s;
}
int main(){
	long long t;
	cin>>t;
	while (t--){
		long long n;
		cin>>n;
		cout<<l(n)<<endl;
	}
	return 0;
}