建议使用这种二分常用的办法,就不用记牛顿迭代法公式了
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 注意要获取的是浮点数
double x = scanner.nextDouble();
double symbol = 1;
if (x < 0) {
// 负数变正数
x *= -1;
symbol = -1;
}
// 立方根结果
double result = getCubeRoot(x) * symbol;
// 格式化小数点位数
double parseDouble = Double.parseDouble(new DecimalFormat("#.0").format(
result));
System.out.println(parseDouble);
}
// 二分查找逼近,不断缩小范围。注意这里只处理正数
private static Double getCubeRoot(double x) {
if (x == 0 || x == 1) {
return x;
}
double min = 0;
double max = x / 2;
// 注意 x 小于0的情况,这个时候最大值应该为1。因为0~1之间的小数是越乘越小
if (max < 1) {
max = 1;
}
// 精度控制
while (max - min > 0.001d) {
// 二分
double mid = (min + max) / 2;
// 该值的3次方过大
if (mid * mid * mid > x) {
max = mid;
continue;
}
// 该值的3次方过小
if (mid * mid * mid < x) {
min = mid;
}
}
return max;
}
}
查看2道真题和解析