您的位置:首页 > 其它

uva 10916 Factstone Benchmark

2013-09-27 18:56 393 查看
利用对数的性质

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm uva