题目

https://www.acwing.com/problem/content/792/

790.webp

算法思想

这是一道经典的浮点数二分,浮点数二分实际上是求一个近似值,因此循环条件为 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)。