PKU1423:求n!的位数。

Stirling 公式:n!=sqrt(2*pi*n)*(n/e)^n;
d=lg(n!)=(n*log10(n/e)+1+0.5*log10(2*pi*n));
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<map>
#include<iostream>
#include<math.h>
#include <queue>
#include<algorithm>
using namespace std;
#define inf 2147483646
#define pi 3.1415926535898
#define e 2.718281828459
#define LL __int64
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,ans;
	   scanf("%d",&n);
	   if(n==1)
		   printf("1\n");
	   else
	   {
	   ans=(int)(n*log10(n/e)+1+0.5*log10(2*pi*n));
	   printf("%d\n",ans);
	   }
	}
}

你可能感兴趣的:(PKU1423:求n!的位数。)