Poj2109 (2) k^n = p.

二分法,由p最大值最小值的中间值开始猜k,通过比较pow(k,n)与p的大小来进一步精确k,直到找到。

#include<stdio.h>
#include<math.h>

#define eps 0.0000000001     //????

void work();

double n, p, k;

int main()
{
    while (scanf("%lf%lf", &n, &p) != EOF)
    {
        work();
    }
    return 0;
}

void work()
{
    long long left, right, mid;
    left = 0;
    right = 1000000002;     //因为 1<=k<=10^9

    while (left + eps < right)  //此处为何+eps?
    {
        mid = (left + right) / 2;
        if (pow(mid, n) - p > 0)     //说明k<mid
        {
            right = mid;
        }
        else if (pow(mid, n) - p < 0)//说明k>mid
        {
            left = mid;
        }
        else
        {
            printf("%.01d\n", mid);
            break;
        }
        
    }
}

 

posted @ 2016-11-24 14:34  Strugglinggirl  阅读(225)  评论(0编辑  收藏  举报