建议使用这种二分常用的办法,就不用记牛顿迭代法公式了

求解立方根

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;
    }
}

全部评论

相关推荐

06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务