题目来源
题目描述
题目解析
易错点
- 小心溢出
- 向下取整
代码
class Solution {
public:
int mySqrt(int x) {
if(x == 0){
return 0;
}
if(x <= 3){
return 1;
}
long ans = 1;
long L = 1, R = x, M = 0;
while (L <= R){
M = (L + R) / 2;
if(M * M <= x){
ans = M;
L = M + 1;
}else{
R = M - 1;
}
}
return (int)ans;
}
};
扩展:double的x开根号保留小数点后k位
思路:
(1)先将小数点之前的定出来
(2)小数点之后一定是3.0000~3.9999之间二分
扩展:怎么判断一个数是是不是2的几次冥
思路:
(1)一个数二进制上只有一个1就是2的某次冥
(2)怎么判断呢?num - 1把最后一个1打散,然后&