题解
本题的解法来自如下链接大佬的解法。
二分具体做法
-
如果一个数num>1,那么这个数的立方根一定在1~num之间。
-
如果一个数num<-1,那么这个数的立方根一定在num~-1
-
如果一个数-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;
}
}