HDU 1018 Big Number(阶乘位数计算)

来源:互联网 发布:新时模型淘宝 编辑:程序博客网 时间:2024/04/25 20:08
整数n的位数的计算方法为:log10(n)+1
故n!的位数为log10(n!)+1
 

如果仅仅是求阶乘的位数,用斯特林(Stirling)公式求解

斯特林(Stirling)公式:


n!的位数就是求log10((2*PI*n)^1/2*(n/e)^n)+1

即 1/2*log10(2*PI*n)+n*log10(n/e)+1


这题解决后可以尝试1042 n!


#include<stdio.h>#include<math.h>#define PI 3.141592654#define E 2.71828182846int l(int n){    int s=1;    if(n>3)        s=log10(2*PI*n)/2+n*log10(n/E)+1;    return s;}int main(void){  int T, m;  scanf("%d", &T);  while (T--) {    scanf("%d", &m);    printf("%d\n", l(m));  }  return 0;}




原创粉丝点击