求n!(十进制)的位数

Contents

分析:

其实就是求log10(n!)(整数部分) + 1 , log10(n!) = lg2 + lg3 + …+lgn

+1的原因:

例如:假设n!=10,则有两位数,而log10(10) = 1,同理100的时候是2 + 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


#include <iostream>
#include <cmath>
using namespace std;

int ()
{
int N;
while(scanf("%d", &N) != EOF){
double sum = 0.0;
for(int i = 2; i <= N; i++)
sum += log10(i);
printf("%dn", (int)sum + 1);
}
return 0;
}