题目大意:求满足n! < 2^k,n的最大值。
解题思路:通过两边取对数变化不等式 为 k > sum(log(i))/ log(2)。
数太大了一开始以为要做大数计算。。。
这个题放到高中应该很容易,一下子没想到。
// 1119. Factstone Benchmark
// n! < 2^k -> k > sum(log10(i))/log10(2)
#include <iostream>
#include <cmath>
using namespace std;
int main () {
//freopen("D:\\input.txt","r",stdin);
int year;
while( cin >> year && year != 0 ){
int k = pow( 2.0, ( year - 1960 )/10 + 2 );
double sum = 0;
int i = 1;
while( i++ ){
sum += log10((double)i)/log10((double)2);
if( k < sum ) break;
}
cout << --i << endl;
}
return 0;
}