斯特林公式的应用num=floor(log10(N)+1);

斯特林公式如下:

    

计算阶乘的位数 poj 1423_#define

带入公式即可。(其中floor可以用(int)代替,但不能用printf输出%.0f的浮点数,因为后者会自动四舍五入)

#include<stdio.h>
#include<math.h>
#define PI 3.141592653589793239
#define ee 2.7182818284590452354
int ans(int n){
	return (int)((n*log10(n/ee)+log10(sqrt(2*n*PI))))+1;
}
int main(){
  int n,i,k;
  scanf("%d",&n);
  for(i=1;i<=n;i++){
     scanf("%d",&k);
     printf("%d\n",ans(k));
  }
return 0;
}