自己开始的思路感觉并不好.....参考网上人的思路.....堪比变态
此题已经被 AC
/*
首先第一思路就是大数阶乘,求出具体数值用数组存储,然后sizeof(a)/sizeof(a[0]) 拿到个数,操作内存占用大,时间慢,计算阶乘的具体数值会做很多无用功
所以根据网上的思路可以推导出公式:
任何一个两位数 例如 99 肯定大于10 小于100
=> 10^x-1<= 任意数a(具有x位)<10^x
=> x-1<= log10(a)<x
=> x=log10(a)+1
=> x= log10(a!) => x=log10(1)+log10(2)+.....log10(a)
题目转化为了队log 求和
*/
# include<iostream>
using namespace std;
int main(void) {
int n;
int N;
int index = 0;
double sum = 0;
cin >> n;
while (n--) {
cin >> N;
for (index = 1; index <= N; ++index) {
sum += log10(index);
}
cout <<(int) (sum +1)<< endl;
sum = 0;
}
system("pause");
return 0;
}