1、题目描述
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
2、示例
输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
3、题解
基本思想:牛顿迭代法求平方根,迭代公式Xn+1=(Xn^2+N)/2Xn=(Xn+N/Xn)/2,初始Xn可以设置为N或者N/2,初始Xn设置为N/2时要考虑特殊情况1。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int mySqrt(int x) {
//基本思想:牛顿迭代法求平方根,迭代公式Xn+1=(Xn^2+N)/2Xn=(Xn+N/Xn)/2,初始Xn可以设置为N或者N/2
//初始Xn设置为N/2时要考虑特殊情况1
if (x == 1)
return 1;
//防止求root*root时溢出,用long long
long long root = x / 2;
//精度只要满足1即可
while (root * root - x >= 1)
{
root = (root + x / root) / 2;
}
return root;
}
};
int main()
{
Solution solute;
int x = 2147395599;
cout << solute.mySqrt(x) << endl;
return 0;
}