求大数的位数,要想到使用log的方法!!
n的位数 =(int)log10(n)+1
这样一来,本题就变为求 log10(n!)+1
log内的乘法可以转化为log外的加法:log10(n!) = log10(n) + log10(n-1) + log10(n-2) + ...+ log10(2)
#include <iostream>
#include <stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
int main()
{
int n,t;scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
double s=0;
for(int i=1;i<=n;i++)
s+=log10(i);
printf("%d\n",(int)s+1);
}
return 0;
}