1. 程式人生 > >【 OJ 】 HDOJ1018 18年10月30日20:40 [ 17 ]

【 OJ 】 HDOJ1018 18年10月30日20:40 [ 17 ]

自己開始的思路感覺並不好.....參考網上人的思路.....堪比變態

此題已經被 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;
}