java---浮点数二分查找---数的三次方根(每日一道算法2022.7.20)

题目:
给定一个浮点数 n,求它的三次方根。

输入格式
共一行,包含一个浮点数 n。

输出格式
共一行,包含一个浮点数,表示问题的解。

注意,结果保留 6 位小数。

数据范围
−10000≤n≤10000

输入:
1000.00
输出:
10.000000
import java.io.*;
public class 浮点数二分 {
    public static void main(String[] args) throws IOException {
        //这里和Scanner功能一样,就是接收速度会快
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        double l, r, x, n;
        System.out.print("pls enter a float: ");
        x = Double.parseDouble(input.readLine());     //接收到数据,转为double类型
        n = Math.abs(x);                                //用n接收到x的绝对值,防止负数出错,整个计算过程使用的都是n也就是正数
        if (n < 1) {l = n; r = 1;}                      //对n进行判定,防止出现无法解算例如0.001这种数据
        else {l = 1; r = n;}

        //浮点数二分算法模板,这里用的是三次方根的计算方式,可以根据需求更改,总的来说和整数二分差不太多,甚至更简单,毕竟不用+1-1之类
        while (r - l > 1E-8) {                        
            double mid = (l + r) / 2;
            if (mid * mid * mid >= n) {r = mid;}
            else {l = mid;}
        }
        
        //最后判断x本身正负,进行符号更改
        if (x > 0) System.out.printf("%.6f\n", l);
        else System.out.printf("-%.6f\n", l);

    }
}

声明:
算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值