题解 | 求解立方根
解题思路:
- 二分查找
- 有两个注意点:
- 正数和负数
- 在0~1,-1~0的区间内,两数相乘,其值越来越小
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { // 需要分情况考虑: // 1. 正数 -> 分两种:0<x<1 x>1 // 2. 负数 -> 同样分两种: -1<x<0 x<-1 public static void main(String[] args) { Scanner in = new Scanner(System.in); double num = in.nextDouble(); // 主要针对0<x<1的情况,在这个区间,相乘是不断变小的,其值范围是在0~1之间,最大值取0~1即可 double l = num > 0 ? 0 : (num < -1 ? num : -1); double h = num > 0 ? (num > 1 ? num : 1) : 0; double delta = 0.01; while (h * h * h - num > delta) { double mid = (h + l) / 2; if (mid * mid * mid < num) { l = mid; } else if (mid * mid * mid > num) { h = mid; } } System.out.println(String.format("%.1f", h)); } }