这道题看的时候最开始是想当大数处理。后来想想,太大了空间,时间都肯定要超标。所以我们转换了思路,用log10对数进行处理。
log10(10)=1;
log10(100)=2;
log10(1000)=3;
log10(10000)=4;
接下来就不依次类推了。
当a不为10的幂时向下取整就行了。
这就可以发现a的位数=log10(a)+1;
所以a!可以写成:int((double)log10(1)+(double)log10(2)+...(double)log10(a)));
#include <iostream>
#include <math.h>
using namespace std ;
int main(){
int n;
cin>>n;
while(n--){
int a;
cin >> a;
double ans = 0;
for(int i = 1 ; i <= a ; i++)
ans +=log10((double)i);
ans++;
cout<<(int)ans<<endl;
}
return 0;
}