设为首页 加入收藏

TOP

uva 701 - The Archeologists' Dilemma
2015-11-21 01:52:27 来源: 作者: 【 】 浏览:7
Tags:uva 701 The Archeologists' Dilemma
题目大意:给出x,求一个e,使得x * 10 ^ y ≤ 2 ^ e < (x + 1) * 10 ^ y。
?
解题思路:问题可以转换成log2(x) + y * log2(10) ≤ e < log2(x + 1) + y*log2(10),
然后枚举y,判断条件。
?
?
#include   
#include   
#include   
  
int main  () {  
    int x, y;  
    double l, r, d, a, b;  
    while (scanf("%d", &x) == 1) {  
        y = x;  
        int c = 0;  
        while (y) {  
            c++;  
            y /= 10;  
        }  
  
        l = log(x) / log(2);  
        r = log(x + 1) / log(2);  
        d = log(10) / log(2);  
  
        for (int i = c + 1; ; i++) {  
            a = l + i * d;  
            b = r + i * d;  
  
            if (ceil(a) <= floor(b)) {  
                printf("%.0lf\n", ceil(a));  
                break;  
            } else if (i == 1000000) {  
                    printf("no power of 2\n");  
                    break;  
            }  
        }  
    }  
    return 0;  
}  

?

?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVa 10881 Piotr's Ants 下一篇uva 10277 - Boastin' Red So..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: