二分法求解

  • 先寻找左右区间(l,r),再采用二分循环夹逼,最后得到结果。详细就看代码吧
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        double num = s.nextDouble();
        boolean flag = false;
        if (num < 0){
            num = -num;
            flag = true;
        }
        double l = 0;// 左区间
        double r = 0;// 右区间
        // 右区间立方与num比较,小于则加一
        while ( r * r * r < num){
            r++;
        }
        // 假如num = 10 那么它一定在 2^3 和 3^3之间,因此左区间为右区间减一
        l = r - 1;

        // 二分查找
        double mid = l + (r-l)/2; // 取中间值
        double cbrt = mid * mid * mid; // 中间值的立方
        // 定义出口,精确到0.1
        while (r - l > 0.1){
            if (cbrt > num){ // 中间值大于结果,将r向左移
                r = mid;
            }else {// 中间值小于结果,将l向右移
                l = mid;
            }
            mid = l + (r-l)/2;
            cbrt = mid * mid * mid;
        }
        // 查找结束,此时mid为最接近的值
        if (flag){
            mid = -mid;
        }
        // 输出结果
        System.out.println(String.format("%.1f",mid));
    }
}