sicily 1119 Factstone Benchmark

题意:求满足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 ============================================

 

 

 

你可能感兴趣的:(mark)