挺水的一道题,看懂题意: 核心的话就是,计算n!<2^K,(n+1)>=2^k 的n;
如果直接按照这个算的话,不用大数,应该会超范围,而考虑到对数的话, 就可以避开大数;log(n!) = log(n)+log(n-1)+....+log(1);这样就可以啦:
代码:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int year,k;
while(cin>>year&&year)
{
k=(year-1940)/10;
double sum=0;
int i=1;
while(sum<pow(2.0,k))
{
sum+=log2(i*1.0);
i++;
}
cout<<i-2<<endl;
}
}