题解 | #求解立方根#

求解立方根

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

import java.util.*;
import java.text.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            double m = in.nextDouble();
            if(m==0){
                System.out.println(0.0);
            }
            //思路:每次砍一半,求3次方的值是否与m相等
            //计算边界
            double l = 0, r = 0, mid = 0;
            DecimalFormat f=new DecimalFormat("0.0");
            if (m > 0) {
                if (m > 1) {
                    //根一定大于1且根一定小于m,{1,m}
                    l=1.0;
                    r=m;
                } else {
                    //根一定小于1且大于m,{m,1}
                    l=m;
                    r=1.0;
                }
            } else {
                //m: -1<m<0
                if (m > -1) {
                    //-0.2*(-0.2)*(-0.2)=0.008;
                    l=-1;
                    r=m;
                } else {
                    l=m;
                    r=-1;
                }
            }
            //二分:设置差值:0.01
            while(l+0.001<r){
                mid=(l+r)/2;
                double n=mid*mid*mid;
                if(f.format(n).equals(f.format(m))){
                    System.out.println(f.format(mid));
                    break;
                }else if(n>m){
                    r=mid;
                }else{
                    l=mid;
                }
            }
        }
    }
}

全部评论

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
牛客383479252号:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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