hdoj1141

当数值很大时考虑对数思想,来大幅度减小数值

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double log2[1000009];
int main()
{
    int y,i;
    log2[1]=0;
    for(i=2;i<=1000000;i++)
        log2[i]=log((double)i)/log((double)2);
    for(i=2;i<=1000000;i++)
    {
        log2[i]=log2[i]+log2[i-1];
    }
    scanf("%d",&y);
    while(y!=0)
    {
        y=y/10*10;
        int k=(y-1960)/10;
        double w=4*pow(2.0,k);
        for(i=1000000;i>=1;i--)
            if(log2[i]<w)
                break;
        printf("%d\n",i);
    
        scanf("%d",&y);
    }

return 0;
}