题意:给你一个年份y,1960<=y<=2160,从1960年的4位整数开始,每10年位数都会乘以2,要你输出一个数n,使得n!能被当前的位数表示出来。
取对数。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
const int N=30;
int a[N];
int main()
{
int cnt=1,num=0,k=4;
double sum=0;
for(int i=0;i<25;i++,k*=2)
{
while(sum<k*log10(2.))
{
cnt++;
sum+=log10(cnt);
}
sum-=log10(cnt);
a[i]=(--cnt);
}
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
printf("%d\n",a[(n-1960)/10]);
}
return 0;
}