r题目描述
给定一个非负整数a,求它的开方,向下取整。
思路
- 二分法,在[0,a]范围内二分查找
- 牛顿迭代法
代码
1. 查找方法
- 避免整数溢出
- (i+j) / 2
- mid * mid < x
int mySqrt(int x) {if (x == 0) return 0;int i = 1;int j = x;int sqrt = 0;while(i <= j){int mid = i + (j - i) / 2;sqrt = x / mid;if (mid < sqrt){i = mid + 1;}else if (mid > sqrt){j = mid - 1;}else{return mid;}}return j;}
- 牛顿迭代法
int mySqrt(int x)
{
long result = x;
while (result * result > x)
{
result = (x + result / x) / 2;
}
return result;
}
