模版
// 这里根据题目要求保留结果几位小数来决定,如果保留4位小数则是1e-6(多开2位)
while (r - l > 1e-6) {
double mid = (r + l) / 2;
if (mid在二段性右边) r = mid;
else l = mid;
}
// 上面的循环结束后,r无限接近于l,此时的r和l即为二段性的分界点
应用
790. 数的三次方根
思路:
- 数据范围在 [-10000,10000] 之间,即被开方数取值在这之间
- 那么其三次方根一定在 [-10000,10000] 之间,用mid表示该三次方根
- 三次方根在这区间内具有单调性,所以可以用二分法
- 用 mid 当作该三次方根,输入的 x 当作二段性的分界点
- 只要当 mid * mid * mid 等于 x 时,该 mid 即为 x 的三次方根
class Main {
Scanner s = new Scanner(System.in);
void run() {
double x = s.nextDouble();
double l = -10000, r = 10000;
// 结果保留6位小数,那么这里要多开两位小数,10的8次方
while (r - l > 1e-8) {
double mid = (r + l) / 2;
if (mid * mid * mid >= x) r = mid;
else l = mid;
}
System.out.println(String.format("%.6f", l));
}
public static void main(String[] args) {
new Main().run();
}
}