解题思路: 1.判断正负。判断输入的数是正数还是符数,设置一个flag表示符号位,flag=0为正,flag=1为负。 2.划分区间。把input的绝对值划分成小于1和大于1的两个区间,如果input小于1,设置二分的初始下界为0,上界为1.input大于1,则设置下届为0,上界为input。 3.循环求解。设置一个误差d,使d=input/(target*target)-target.如果d绝对值在0到0.1之间,则说明已经找到这个input的立方根了。打印然后退出循环。如果d>0.1说明当前的target偏大,需要把上界调小;如果d<-0.1说明target偏小,需要把下界调大。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextDouble()) { // 注意 while 处理多个 case
double input = in.nextDouble();
double low = 0,high = input;
int flag =0;
if(input<0){
flag = 1;
input = -input;
if(input<1.0){
high =1;
}
else
high=input;
}
else if(input<1) high =1;
while(true){
double target = low+(high - low)/2;
double d = input/(target*target)-target;
if(d>=-0.1&&d<=0.1){
if(flag ==1)
System.out.println("-"+String.format("%.1f", target));
else System.out.println(String.format("%.1f", target));
break;
}
else if(d>0.1){
low = target;
}
else high = target;
}
}
}
}