题解 | #特殊的产奶量#
特殊的产奶量
https://www.nowcoder.com/practice/7780f80e7ece45928c7c138a20fede91
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param x int整型 * @return string字符串 */ public String mySqrt (int x) { // write code here if (x == 0) { return "0.00"; } double guess = x / 2.0; // 初始猜测值为x的一半 double epsilon = 0.01; // 精度设为0.01 while (Math.abs(guess * guess - x) > epsilon) { guess = (guess + x / guess) / 2; // 使用牛顿迭代法更新猜测值 } // 将结果保留小数点后两位,用format会宿舍五入 String result = String.valueOf(guess); int decimalIndex = result.indexOf("."); //如果有小数点,并且小数点后还存在两位以上的数 if (decimalIndex != -1 && result.length()-decimalIndex >=2) { //截取两位小数 result = result.substring(0, decimalIndex + 3); } return result; } }
Java代码
主要就是用牛顿迭代法。考察的知识点包括数组,数学,字符串。
- 首先判断输入的数字 x 是否为0,如果是0,则直接返回 "0.00"。
- 初始化猜测值 guess 为 x 的一半,并设置精度 epsilon 为 0.01。
- 使用 while 循环,当猜测值平方与 x 的差的绝对值大于精度时,不断更新猜测值 guess,直到满足精度要求。
- 将结果转换为字符串 result,使用 String.valueOf 方法将 guess 转换为字符串。
- 判断结果是否包含小数点,如果包含小数点并且小数点后至少存在两位数,则截取小数点后两位。
- 返回最终的结果。
主要的坑就是,防止自动四舍五入。