题解 | #求解立方根#

求解立方根

http://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca

二分法求解

  • 先寻找左右区间(l,r),再采用二分循环夹逼,最后得到结果。详细就看代码吧
import java.util.*;

public class Main {

    public static void main(String[] args){
        Scanner s = new Scanner(System.in);
        double num = s.nextDouble();
        boolean flag = false;
        if (num < 0){
            num = -num;
            flag = true;
        }
        double l = 0;// 左区间
        double r = 0;// 右区间
        // 右区间立方与num比较,小于则加一
        while ( r * r * r < num){
            r++;
        }
        // 假如num = 10 那么它一定在 2^3 和 3^3之间,因此左区间为右区间减一
        l = r - 1;

        // 二分查找
        double mid = l + (r-l)/2; // 取中间值
        double cbrt = mid * mid * mid; // 中间值的立方
        // 定义出口,精确到0.1
        while (r - l > 0.1){
            if (cbrt > num){ // 中间值大于结果,将r向左移
                r = mid;
            }else {// 中间值小于结果,将l向右移
                l = mid;
            }
            mid = l + (r-l)/2;
            cbrt = mid * mid * mid;
        }
        // 查找结束,此时mid为最接近的值
        if (flag){
            mid = -mid;
        }
        // 输出结果
        System.out.println(String.format("%.1f",mid));
    }
}
全部评论
为什么精确到0·1。。
点赞 回复 分享
发布于 2023-04-18 11:18 广东

相关推荐

ddd7_:跟我一模一样,加微信的hr都同一个,扫码了白年书人查看图片
点赞 评论 收藏
分享
评论
7
11
分享

创作者周榜

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