题解 | #求解立方根#
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
import java.util.Scanner; import java.math.BigDecimal; import java.util.LinkedList; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 传统的二分查找方法,如果是负数就*-1当做正数处理,这里要注意 double left=-21; double right=21; 这算是搜索区间,刚开始把输入的参数当做right值,没有考虑到小数的情况,导致两组用例通过不了,小数是越乘越小 答案比输入参数大。这里是细节 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 double v = in.nextDouble(); double temp1=v; if(v<0){ v=v*-1; } double mid=0; double left=-21; double right=21; while (true){ mid=(right+left)/2; double temp=(mid*mid*mid); BigDecimal bigDecimal = new BigDecimal(temp); double v1 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); if(v1==v){ BigDecimal mi = new BigDecimal(mid); if(temp1<0){ System.out.println(mi.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()*-1); }else { System.out.println(mi.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); } break; }else { if(v1>v){ right=mid; } if (v1<v){ left=mid; } } } } }#二分查找#