数据结构作业——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;  
}  

  

posted @ 2016-09-06 19:36  zxzhang  阅读(377)  评论(0)    收藏  举报