整体思想就是使用二分查找的办法找出数的立方根,注意负数的输入和小于1的数的输入。负数看做正数,但输出时要提前变号。小于1的输入,比如0.27的立方根是0.3,它的查找范围并不在0~0.27之间,所以直接把top升高到1就好了。
具体实现代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double input = sc.nextDouble();
//负数当作正数处理
double number = input > 0 ? input : -input;
double middle = 0;
//是小于1的数,将1做为top
double top;
if (Math.abs(number)<1){
top = 1;
}else{
top = number;
}
double bottom = 0;
//测试当前数据是否合格,否则查找更精确的数
while (Math.abs(number - middle * middle * middle) > 0.5) {
//使用二分法对数据进行查找
middle = (top + bottom) / 2;
if (middle * middle * middle > number) {
top = middle;
} else {
bottom = middle;
}
}
if (input<0){
middle=-middle;
}
System.out.println(String.format("%.1f", middle));
}
}