二分法,由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 ;
}void work()
{
long long left, right, mid;
left = ;
right = ; //因为 1<=k<=10^9 while (left + eps < right) //此处为何+eps?
{
mid = (left + right) / ;
if (pow(mid, n) - p > ) //说明k<mid
{
right = mid;
}
else if (pow(mid, n) - p < )//说明k>mid
{
left = mid;
}
else
{
printf("%.01d\n", mid);
break;
} }
}