poj 2661 Factstone Benchmark

 1 /**
 2 大意: 求m!用2进制表示有多少位  m! = 2^n   两边同时取对数  log2(m!) = n
 3      即  log2(1) + log2(2)+log2(3)+log2(4)...+log2(m) = n
 4 枚举即可
 5 
 6 拓展: 
 7 可以用斯特林(Stirling)公式求解
 8 
 9 
10 斯特林(Stirling)公式:
11 
12 log(x) =====ln(x)
13 
14 **/
15 #include <iostream>
16 #include <cmath>
17 using namespace std;
18 
19 int main()
20 {
21     int y;
22     while(cin>>y&&y){
23         int t = 1<<((y-1960)/10+2);
24         double  m=1;
25         double res =log(m)/log(2.0);
26         while(res<=t){
27             m++;
28             res += log(m)/log(2.0) ;
29         }
30         cout<<m-1<<endl;
31     }
32     return 0;
33 }

 

posted @ 2014-05-12 09:20  夜晓楼  阅读(185)  评论(0编辑  收藏  举报