题目:
给定一个浮点数 n,求它的三次方根。
输入格式
共一行,包含一个浮点数 n。
输出格式
共一行,包含一个浮点数,表示问题的解。
注意,结果保留 6 位小数。
数据范围
−10000≤n≤10000
输入:
1000.00
输出:
10.000000
import java.io.*;
public class 浮点数二分 {
public static void main(String[] args) throws IOException {
//这里和Scanner功能一样,就是接收速度会快
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
double l, r, x, n;
System.out.print("pls enter a float: ");
x = Double.parseDouble(input.readLine()); //接收到数据,转为double类型
n = Math.abs(x); //用n接收到x的绝对值,防止负数出错,整个计算过程使用的都是n也就是正数
if (n < 1) {l = n; r = 1;} //对n进行判定,防止出现无法解算例如0.001这种数据
else {l = 1; r = n;}
//浮点数二分算法模板,这里用的是三次方根的计算方式,可以根据需求更改,总的来说和整数二分差不太多,甚至更简单,毕竟不用+1-1之类
while (r - l > 1E-8) {
double mid = (l + r) / 2;
if (mid * mid * mid >= n) {r = mid;}
else {l = mid;}
}
//最后判断x本身正负,进行符号更改
if (x > 0) System.out.printf("%.6f\n", l);
else System.out.printf("-%.6f\n", l);
}
}
声明:
算法思路来源为y总,详细请见https://www.acwing.com/
本文仅用作学习记录和交流