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 }