TOJ 1777. Factstone Benchmark

挺水的一道题,看懂题意: 核心的话就是,计算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;
   }
}


你可能感兴趣的:(对数,TOJ)