实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
方法一:二分法
假如我们求得是16的平方根,那么为四,我们将16一分为二,8的平方为64不等于16,我们将8一分为二等于4,4的平方为16.
int mySqrt(int x)
{
if(x <= 1) return x;
int start = 0;
int end =x/2 + 1;
while(start <= end)
{
long long mid = start + end /2;
long long sq = mid*mid;
if(sq == x)
return mid;
if(sq > x)
end = mid - 1;
if(sq < x)
start = start + 1;
}
return;
}
方法二:暴力法
int mySqrt(int x) {
for(int i = 0;;i++)
{
if(i * i <= x && (long long)(i + 1) * (long long)(i + 1) > x)//longlong害怕溢出
//如果还是不放心可以写成除的方式 i<=longlong(i + 1)/i
return i;
}
}