建议使用这种二分常用的办法,就不用记牛顿迭代法公式了
求解立方根
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; } }