题解 | #求解立方根#

java 二分,结果选在二分答案的左侧,存在一种情况,即最佳结果在答案右侧,所以需要获取到二分结果后判断右侧和左侧的答案哪一个更接近答案。
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextDouble()) { // 注意 while 处理多个 case
            double num = in.nextDouble();
            boolean flag = false;
            if(num < 0){
                flag = true;
                num = -num;
            }
            double right = num>1.0?num:1.0;
            double ans = binarySearch(0, right, num);
            if(Math.abs(Math.pow(ans+0.1, 3)-num) < Math.abs(Math.pow(ans, 3)-num)){
                ans += 0.1;
            };
            if(flag) ans = -ans;
            System.out.println(String.format("%.1f", ans));
        }
    }
    
    public static double binarySearch(double l, double r, double target){
        while(l<r){
            double mid = l + (r-l)/2;
            mid = Double.parseDouble(String.format("%.1f", mid));
            double val = mid*mid*mid;
            //if(mid == l && mid == r) return mid;
            if(val > target){
                r = mid-0.1;
            }else{
                l = mid;
            }
        }
        return l;
    }
}


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务