题目意思是给一个数n,求n的阶乘一共有多少位,鉴于n的阶乘可能是一个大数,而且模拟乘法的过程非常麻烦,可以选择取10为底的对数:n!的位数 = log10 n!+1 = log10 (2) + log10(3) +…… log10(n) + 1 。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <vector>
#include <stack>
#include <cstdlib>
#include <queue>
#include <set>
#include <cctype>
using namespace std;
#define loop(i,u,v) for(int i = u;i <= v;i++)
#define rloop(i,u,v) for(int i = u;i >= v;i--)
#define eps 0.00000001
int jiecheng(int a)
{
int n = 1;
loop(i,2,a)
n *= i;
return n;
}
int main()
{
int n,m;
double a;
cin >> n;
while(n--)
{
cin >> m;
a = 0;
loop(i,2,m)
a += log10(i);
cout << int(a) + 1 << endl;
}
return 0;
}