题解 | #特殊的产奶量#

特殊的产奶量

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代码

主要就是用牛顿迭代法。考察的知识点包括数组,数学,字符串。

  1. 首先判断输入的数字 x 是否为0,如果是0,则直接返回 "0.00"。
  2. 初始化猜测值 guess 为 x 的一半,并设置精度 epsilon 为 0.01。
  3. 使用 while 循环,当猜测值平方与 x 的差的绝对值大于精度时,不断更新猜测值 guess,直到满足精度要求。
  4. 将结果转换为字符串 result,使用 String.valueOf 方法将 guess 转换为字符串。
  5. 判断结果是否包含小数点,如果包含小数点并且小数点后至少存在两位数,则截取小数点后两位。
  6. 返回最终的结果。

主要的坑就是,防止自动四舍五入。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务