Implement int sqrt(int x)
.
Compute and return the square root of x.
题意:计算整数x的平方根。
这里我采用的方法是二分法,因为int能表示的最大整数为2^31-1=2147483647,开根号为46340。所以从1-46340区间进行二分查找,这里需要注意的是查找时,如果判断medium*medium<x为true,需要再进一步判断(medium+1)*(medium+1)>x是否成立,如果成立,则应该立即返回medium。这样做的原因是我们求平方根时返回的应该是小于等于x平方根的最大整数。
class Solution {
public:
int sqrt(int x){
if(x==0) return 0;
int begin=1,end=46340;
int medium=(begin+end)>>1;
int square=medium*medium;
while(square!=x&&begin<end)
{
if(square<x)
{
if((medium+1)*(medium+1)>x)
return medium;
else
begin=medium+1;
}
else
{
end=medium-1;
}
medium=(begin+end)>>1;
square=medium*medium;
}
if(square==x)
return medium;
else
return begin;
}
};