实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
思路:
本题使用二分法,设置上界和下界,取中值与x相除,检验其与x平方根大小差距,然后重新定义上下界。这样迭代下去有两种情况,中值与x相除得到本身,直接求出平方根;由于舍去小数部分中值已经取到平方根,但与x相除得数无法相等,此时需要将上下界收敛到平方根的值,最终导致上界小于下界,将此作为循环结束条件,由于舍去小数部分,此时需要取较小的上界作为答案。
class Solution {
public:
int mySqrt(int x) {
if(x==0) return 0;
long int a,b,c,d;
a=1;
b=x;
while(a<=b)
{
c=(a+b)/2;
d=x/c;
if(c>d)
{
b=c-1;
}
else if(c<d)
{
a=c+1;
}
else
{
return d;
}
}
return b;
}
};