首页 > 代码库 > N!的位数

N!的位数

Description

求N!的位数

Input

输入第一行为一个正整数 n(1<=n<=25000)。

Output

输出 n!的位数。

Sample Input

10
20

Sample Output

20
19

思路

求一个数的位数,我们只需要对其进行以10为底的对数运算。假设有个数是四位数,那么其介于1000-10000中间,log10(1000)-log10(10000),结果为3-4,取4.。
另外也可以通过斯特林公式求解。技术分享这就是说,对于足够大的整数n,这两个数互为近似值。更加精确地:技术分享技术分享
#include<stdio.h>  #include<math.h>    int main()  {      int N,i;      double cnt = 0;      scanf("%d",&N);      for (i = 1;i <= N;i++)      {          cnt += log10(i);      }      printf("%d\n",int(cnt) + 1);      return 0;  }  

  

#include<stdio.h>  #include<math.h>  const double PI = acos(-1.0);   const double e = exp(double(1));  int main()  {      int n;      scanf("%d",&n);      printf("%d\n",int(log10(sqrt(2*PI*n))+n*log10(n/e)) + 1);      return 0;  }  

  

N!的位数