题解 | 求解立方根

#牛客创作赏金赛# #刷题我是认真的#

解题思路:

  1. 二分查找
  2. 有两个注意点:
  3. 正数和负数
  4. 在0~1,-1~0的区间内,两数相乘,其值越来越小
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    // 需要分情况考虑:
    // 1. 正数  -> 分两种:0<x<1 x>1
    // 2. 负数  -> 同样分两种: -1<x<0  x<-1
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double num = in.nextDouble();
        // 主要针对0<x<1的情况,在这个区间,相乘是不断变小的,其值范围是在0~1之间,最大值取0~1即可
        double l = num > 0 ? 0 : (num < -1 ? num : -1);
        double h = num > 0 ? (num > 1 ? num : 1) : 0;
        double delta = 0.01;
        while (h * h * h - num > delta) {
            double mid = (h + l) / 2;
            if (mid * mid * mid < num) {
                l = mid;
            } else if (mid * mid * mid > num) {
                h = mid;
            }
        }
        System.out.println(String.format("%.1f", h));
    }
}

全部评论

相关推荐

_mos_:我以为手抄报简历就已经很顶了,没想到还有表格简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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