题目
https://www.acwing.com/problem/content/792/
算法思想
这是一道经典的浮点数二分,浮点数二分实际上是求一个近似值,因此循环条件为 r - l > 某个值,l = mid,r = mid,不需要考虑边界。
题解
#include <cstdio>
int main() {
double x;
double l = -10000, r = 10000, mid{};
scanf("%lf", &x);
// 8 为经验值,一般是小数点后位数 + 2
while(r - l > 1e-8) {
mid = l + ((r - l)/2);
if(mid * mid * mid >= x)
r = mid;
else l = mid;
}
printf("%lf", l);
}
复杂度
时间复杂度:O(logn),空间复杂度:O(1)。