uva 10916 Factstone Benchmark

题意:给你一个年份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;
}


你可能感兴趣的:(uva 10916 Factstone Benchmark)