题解 | #求解立方根#
求解立方根
https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca
二分法获取值。
如果结果逼近了一个范围,说明获取到了结果
如果没有,则看获取的结果和要得到的值大小关系
1、如果结果小于当前值,说明获取的结果过大,将right=mid
2、如果结果大于当前值,说明获取的结果过小,则left=mid
时间、O(log2 n) n是输入的值。
空间复杂度O(1)
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); Double dd = in.nextDouble(); Double zeroNum = 0.001; Double left = Math.min(-1,dd); Double right =Math.max(1,dd); Double result=0D; while(left<right){ Double mid =left+(right-left)/2; if(Math.abs(mid*mid*mid-dd)>zeroNum){ if(mid*mid*mid>dd){ right=mid; }else{ left=mid; } }else{ result=mid; break; } } System.out.println(String.format("%.1f",result)); } }