题解 | #求解立方根#
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
import java.util.Scanner;
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double input = in.nextDouble();
//答案的范围(-3,3)
double left = -3D;
double right = 3D;
double mid = 0D;
while (right - left > 0.1D) {
mid = (left + right) / 2D;
if (mid * mid * mid > input) {
right = mid;
} else {
left = mid;
}
}
BigDecimal bigDecimalL = new BigDecimal(left);
left = bigDecimalL.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
BigDecimal bigDecimalR = new BigDecimal(right);
right = bigDecimalR.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();
if (input - left * left * left > right * right * right - input) {
System.out.println(right);
} else {
System.out.println(left);
}
}
}
解题思路:
1, 设定初始平方根的范围是-3到+3;
2, 利用二分法, 不断缩小最终目标的范围;
3, 当结果左右边界差小于0.1时, 对结果边界进行小数尾数处理, 得到最终两个数字, 比较输出较为合适的结果
