主题思想: 用对数来缩小数的量级。
因为数实在太大了。
n!<2^x. 给出x 求出n.
利用对数把乘法变成加法,且减小量级。
log2(n!)<log(2^x)=x
log2(1)+log2(2)+...+log(n)<x
AC 代码
#include <iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=21;
int a[maxn];
double Log(int n){
return log10(n*1.0)/log10(2.0);
}
int main()
{
// init a[
for(int i=0;i<maxn;i++){
a[i]=pow(2,i+2);
}
int y;
while(scanf("%d",&y)&&y!=0){
int i=(y-1960)/10;
double d;
int j=1;
d=0;
while(d<a[i]){
d+=Log(j++);
//or Log(++j)
}
// j-1
printf("%d\n",j-2);
}
return 0;
}