一、题目描述
计算一个浮点数的立方根,不使用库函数。保留一位小数。
数据范围:∣val∣≤20 。
二、输入描述
待求解参数,为double类型(一个实数)
三、输出描述
输出参数的立方根。保留一位小数。
四、解题思路
- 从输入中读取一个浮点数;
- 初始化低位low为0,高位high为输入的值;
- 判断输入的值的正负情况,如果小于0,将标志flag设为1,并将输入取绝对值;如果输入小于1,则将高位设为1;
- 进入循环,使用二分查找逼近立方根;
- 在每次循环中,计算中间值target为low和high的平均值;
- 计算d为输入值除以target的平方减去target的差;
- 判断d是否在接近0的范围内(-0.1到0.1之间),如果是,则找到了近似的立方根;
- 根据标志flag判断输出的结果是否带负号,使用String.format保留一位小数并输出结果;
- 继续循环直到输入结束;
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextDouble()) {
double input = sc.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;
}
}
}
}
六、效果展示
🏆下一篇:华为OD机试真题 Java 实现【基站维修工程师】【2023Q1 200分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。