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 ", mid); break; } } }