uva 10916 Factstone Benchmark

来源:互联网 发布:孙悟空与哪吒知乎 编辑:程序博客网 时间:2024/05/18 15:03

利用对数的性质

#include <stdio.h>#include <math.h>double a[260000];int b[260000];void init(){int i;for(i=1; i<260000; i++){a[i] = a[i-1] + log((double)i)/log(2.0);}for(i=1; i<260000; i++){b[i] = floor(a[i]) + 1;}}void func(double bits){int l, r, m;int target = (int)bits;l = 1; r = 259999;while(1){m = (l+r)/2;if(b[m]<=target && target<b[m+1]){break;}else if(target < b[m]){r = m - 1;}else{l = m + 1;}}//printf("target=%d b[m]=%d b[m+1]=%d a[m]=%lf a[m+1]=%lf\n", target, b[m], b[m+1], a[m], a[m+1]);printf("%d\n", m);}int main(void){int year;init();while(1){scanf("%d", &year);if(0 == year)break;func(  pow(2.0,(year-1960)/10) *4  );}return 0;}


原创粉丝点击