斯特林公式求 n!

链接: https://www.nowcoder.net/acm/contest/75/A
来源:牛客网

题目描述

夫夫有一天对一个数有多少位数感兴趣,但是他又不想跟凡夫俗子一样,
所以他想知道给一个整数n,求n!的在8进制下的位数是多少位。

输入描述:

第一行是一个整数t(0 
   

输出描述:

输出n!在8进制下的位数。
 
   
 
   
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int N = 10005;
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
typedef long long ll;
/*斯特林公式求n的阶乘,除以log(8)求在8进制下的位数
n! = 根号(2*pi*n) * (n/e)的n次方;
10进制下整数n的位数为[lgn]+1
8进制下的位数=log(上面那个式子)/log(8) + 1; 

另一种方式: 
ln(n!) =  n*ln(n) + 0.5*ln(2*pi*n);*/
 
int main()
{
	int n,t,ans;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		if(n<2)
		ans=1;
		else
		//ans=(int)ceil((n*log(n)-n+log(2*PI*n)/2)/(log(8))); 两种方式 
		ans=0.5*log(2*PI*n)/log(8)+n*log(n/exp(1))/(log(8))+1;
		printf("%d\n",ans);
	 } 
	return 0;
}




你可能感兴趣的:(斯特林公式求 n!)