题意:求满足n! < 2^k,n的最大值!
解题:指数比较转换成对数比较,达到降幂!
其中: log (n!) = log(n)+log(n-1)+...+log(1);
log(2^k) = k * log(2);
当然也可以使用斯特林(stirling 公式求解)
公式如下:
1 程序代码: 2 3 ============================================ 4 5 #include<iostream> 6 #include<cmath> 7 using namespace std; 8 int main(){ 9 int year; 10 double res; 11 while(cin >> year && year >0){ 12 //add 2 because of the beginning with 4, 1<<2 equals with 4 13 int bits = 1<<((year -1960)/10+2); 14 double i=1; 15 res =0; 16 while(res<bits){ 17 res += log(i)/log(double(2)); 18 i++; 19 } 20 cout<<i-2<<endl; 21 } 22 return 0; 23 } 24 25 ============================================