1.思路
浮点数二分的本质也是边界, 唯一区别是浮点数没有整除, 区间长度可以严格的缩小一半,当区间长度足够小时, 便可以认为是一个数
2.代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double n = in.nextDouble();
double l = -10000, r = 10000; //l是给出的数据范围的下边界,r是给出的数据范围的上边界
while (r - l > 1e-8) { // 精度比所求精度高 2位
double mid = (l + r) / 2;
if (mid * mid * mid >= n) // 不需要考虑边界问题
r = mid;
else
l = mid;
}
System.out.println(String.format("%.6f", l)); // 保留 6位小数
}
}
3.复杂度分析
- 时间复杂度:O(logn)
- 空间复杂度:O(1)
4.注意
精度可以根据题目要求来更改,一般为题目要求保留的位数再多精确两位。