对于一些连乘的数,和以10为底以e为底或者以2为底的数比较,可以采用取对数的方法。就拿uva10916做例子吧,具体代码如下
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<string>
#include<map>
#include<vector>
#include<cctype>
using namespace std;
int solve(int n)
{
int f=0,k=2;
double cnt=0;
for(int i=1960; i<=n; i+=10)
{
k*=2;
}
// printf("%d\n",k );
while(cnt<k)
{
f++;
cnt+=log((double)f)/log(2);
}
printf("%d\n",f-1);
}
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
solve(n);
}
return 0;
}