题目:
求整数n!的位数 1 <= n <= 10^7
类型:数论
有这样一个定理:f(n) = log10(n) + 1 f(n)为整数n的位数
证明:
设n的位数为m,则有10^(m - 1) <= n < 10^m,所以有m - 1 <= log10(n) < m
得:log10(n) < m <= log10(n) + 1
对log10(n)向下取整,得m = (int)log10(n) + 1,得证
所以有:f(n!) = f(1 * 2 * 3 * ... * n) + 1 = f(1) + f(2) + f(3) +...f(n) + 1
// hdoj 1018 Big Number
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
#define FOR(i,a,b) for(i = (a); i < (b); ++i)
#define FORE(i,a,b) for(i = (a); i <= (b); ++i)
int main()
{
int i, j, n, m;
while(cin>>n) {
FOR(i, 0, n) {
cin>>m;
double end = 1;
FORE(j, 2, m)
end += log10(j * 1.0);
cout<<(int)end<<endl;
}
}
return 0;
}