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 转换为字符串。
- 判断结果是否包含小数点,如果包含小数点并且小数点后至少存在两位数,则截取小数点后两位。
- 返回最终的结果。
主要的坑就是,防止自动四舍五入。

京公网安备 11010502036488号