题目描述
求一个数开三次方的结果,精确到小数点后6位
样例
输入:
1000.00
输出:
10.000000
算法1—浮点数的二分查找—JAVA
就是还是通过二分的思想来做,确定范围,每次去一半,然后check一下是否满足当前条件然后来重新给Lift和Right赋值,直到找到精确到6位的结果。
时间复杂度: $O(nlogn)$
参考文献 y总
JAVA 代码
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static final double FW = 1e-8;
public static double N = 0;
public static double bsearch_01(double l, double r){
while ((r - l) > FW){
double mid = (l + r) / 2;
if ((mid * mid * mid) >= N) r = mid;
else l = mid;
}
return l;
}
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
N = scan.nextDouble();
if (N < 0){
N = -N;
double target = bsearch_01(0, N);
System.out.println(String.format("%.6f",-target));
}else {
double target = bsearch_01(0, N);
System.out.println(String.format("%.6f",target));
}
}
}
注意
- 精度
(1)如何表示精度
(2)保留6位小数的话,一般设置位1e-8
(3)String.format(“%.6f”,target); 输出 - 负数
- br.read
(1)br.read接受的是int类型
(2)接受到数据会自动变成ASCII