二分法求解
- 先寻找左右区间(l,r),再采用二分循环夹逼,最后得到结果。详细就看代码吧
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
double num = s.nextDouble();
boolean flag = false;
if (num < 0){
num = -num;
flag = true;
}
double l = 0;// 左区间
double r = 0;// 右区间
// 右区间立方与num比较,小于则加一
while ( r * r * r < num){
r++;
}
// 假如num = 10 那么它一定在 2^3 和 3^3之间,因此左区间为右区间减一
l = r - 1;
// 二分查找
double mid = l + (r-l)/2; // 取中间值
double cbrt = mid * mid * mid; // 中间值的立方
// 定义出口,精确到0.1
while (r - l > 0.1){
if (cbrt > num){ // 中间值大于结果,将r向左移
r = mid;
}else {// 中间值小于结果,将l向右移
l = mid;
}
mid = l + (r-l)/2;
cbrt = mid * mid * mid;
}
// 查找结束,此时mid为最接近的值
if (flag){
mid = -mid;
}
// 输出结果
System.out.println(String.format("%.1f",mid));
}
}