题解

本题的解法来自如下链接大佬的解法。

https://www.cnblogs.com/m6233/p/16002481.html

二分具体做法

  1. 如果一个数num>1,那么这个数的立方根一定在1~num之间。

  2. 如果一个数num<-1,那么这个数的立方根一定在num~-1

  3. 如果一个数-1<num<1,那么这个数的立方根一定在-1~1之间

例如:num = 2.7 可以设置左边界为min(-1,2.7) = -1 右边界 max(1,2.7) = 2.7 所以left = -1,right = 2.7

代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double num = sc.nextDouble();
        double result = binarySearch(num);
        System.out.printf("%.1f", result);
    }

    public static double binarySearch(double num) {
        double left = Math.min(-1, num);
        double right = Math.max(1, num);
        double mid = 0.0;

        // 无限逼近,当right 和 left 精度小于0.0001了说明left的值就逼近答案的值
        while (right - left > 0.001) {
            mid = (right + left) / 2;
            if (mid * mid * mid > num) {
                right = mid;
            } else if (mid * mid * mid < num) {
                left = mid;
            } else {
                return mid; // 相等情况,直接退出
            }
        }
        return left;
    }
}