
二分查找。从1到x进行二分查找,每次判断mid的平方是否<=x,
如果是,则更新ans=mid,并缩小区间;
如果不是,则缩小区间;
最后则找到最接近的ans,使得ans的平方<=x且ans+1的平方>x,即ans为x的算术平方根
注意:x数据范围为int型的取值范围,则计算平方的时候需要注意可能会溢出
#include
#include
#include
#include
using namespace std;
class Solution
{
public:
int mySqrt(int x)
{
int left=1;
int right=x;
int ans=0;
while(left<=right)
{
long long mid=left+((right-left)>>1);
long long square=mid*mid;
if(square<=x)
{
left=mid+1;
ans=mid;
}
else
right=mid-1;
}
return ans;
}
};
int main()
{
int target=9;
Solution *solution=new Solution();
printf("%d\n",solution->mySqrt(target));
delete(solution);
return 0;
}