标签:
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;
}
标签:
原文地址:http://www.cnblogs.com/zzy19961112/p/5846961.html