class Solution {
public:
int mySqrt(int x) {
if (x == 0){
return 0;
} else {
float y ;
for (long int i = 1; i * i <= x; i++){
y = i;
}
return y;
}
}
};
二、二分法
class Solution {
public:
int mySqrt(int x) {
int down = 0, up = x, ans = -1;
while (down <= up){
int mid = down + (up - down) / 2;
if ((long long)mid * mid <= x){
ans = mid;
down = mid + 1;
}
else {
up = mid - 1;
}
}
return ans;
}
};
三、牛顿迭代
class Solution {
public:
int mySqrt(int x) {
if (x == 0) {
return 0;
}
double C = x, x0 = x;
while (true) {
double xi = 0.5 * (x0 + C / x0);
if (fabs(x0 - xi) < 1e-7) {
break;
}
x0 = xi;
}
return int(x0);
}
};