原题链接:https://www.acwing.com/problem/content/description/792/

思路就是直接对根所在的区间进行二分,直到区间长度小于某个误差值。注意到

  • 时,
  • 时,

因此根据的大小可以确定二分区间的右端点。

#include <iostream>

double err = 1e-7;

double cube(double x) { return x * x * x; }

double bin_search(double x) {
double i = 0, j = x < 1 ? 1 : x;
while (j - i > err) {
double k = (i + j) / 2;
double tmp = cube(k);
if (tmp > x) j = k;
else i = k;
}
return i;
}

int main() {
double x;
scanf("%lf", &x);
double ans = x < 0 ? -bin_search(-x) : bin_search(x);
printf("%.6lf", ans);
return 0;
}