题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1141
参考文章:https://blog.csdn.net/fei____fei/article/details/24435837
思路:题目真是好难懂呀,大意是这样的,给出一个n为的计算机,求出这个计算机的运行等级,
运行等级一n!为单位。
即求出n!<2^m;
两边去log,得到 log(n)+log(n-1)+……+log(1)<m*log(2);
将log(2)除过去找到大于m的数就行了。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int main(void) { int n,m,i; double ans; while(~scanf("%d",&n)&&n) { m=(n-1960)/10+2; m=1<<m; ans=0;i=1; while(ans<m) { ans+=log(i++)/log(2); } printf("%d ",i-2); } return 0; }