题解 | #HJ107 求解立方根#

求解立方根

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

import java.util.Scanner;

/**
 * HJ107 求解立方根 - 中等
 */
public class HJ107 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextDouble()) {
            double num = sc.nextDouble();
//            double x = method1(num);
            double x = Dichotomy(num);
            System.out.printf("%.1f", x);
        }
        sc.close();
    }

    /**
     * 1. 牛顿迭代法
     *
     * @param num
     * @return
     */
    private static double method1(double num) {
        double x = 1.0;
        double x1 = x + (num - x * x * x) / (3 * x * x);
        while (x - x1 > 0.000001 || x - x1 < -0.000001) {
            x = x1;
            x1 = x + (num - x * x * x) / (3 * x * x);
        }
        return x1;
    }

    /**
     * 二分查找法
     *
     * @param num
     * @return
     */
    private static double Dichotomy(double num) {
        double right, left, mid = 0.0;
        //一定要注意边界条件,输入的num可能是负数  将x<-1的边界范围定为[x,1],x>1的边界范围定为[-1,x]
        right = Math.max(1.0, num);
        left = Math.min(-1.0, num);
        while (right - left > 0.001) {
            mid = (left + right) / 2;
            if (mid * mid * mid > num) {
                //如果乘积大于num,说明立方根在mid的左侧
                right = mid;
            } else if (mid * mid * mid < num) {
                //如果乘积小于num,说明立方根在mid的右侧
                left = mid;
            } else {
                return mid;
            }
        }
        return right;
    }
}
全部评论

相关推荐

头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
05-29 20:34
门头沟学院 C++
KarlAllen_直通春招版:得做好直接春招的准备。学历差的话,一是面试要求会比学历好的严格不少,二是就算面试通过了也会被排序。总之暑期和秋招对于学历差的就是及其不友好
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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