LintCode : x的平方根
题目
实现int sqrt(int x)函数,计算并返回x的平方根。
样例
sqrt(3)= 1
sqrt(4)= 2
sqrt(5)= 2
sqrt(10)= 3
思路
因为x的平方根不会超过x/2+1,所以我们用二分法从x/2+1开始寻找,为防止溢出,中间变量我们使用long long类型。
代码
int sqrt(int x) {
if(x == 1) {
return 1;
}
if(x <= 0) {
return 0;
}
long long p = 0;
long long r = x / 2 + 1;
while(p != r) {
long long q = (p + r) / 2;
if(q == p) {
return p;
}
if(q * q > x) {
r = q;
}
else if(q * q < x) {
p = q;
}
else return q;
}
return p;
}