Problem
Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
Example
Input: 4
Output: 2
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
the decimal part is truncated, 2 is returned.
Code
static int var = [](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
int mySqrt(int x) {
float f_x = (float)x;
float xhalf = 0.5 * f_x;
int i = *(int*)&f_x;
i = 0x5f375a86- (i>>1);
f_x = *(float*)&i;
f_x = f_x*(1.5-xhalf*f_x*f_x);
f_x = f_x*(1.5-xhalf*f_x*f_x);
f_x = f_x*(1.5-xhalf*f_x*f_x);
int ret = (int)(1/f_x);
if(ret * ret > x)
return ret - 1;
return ret;
}
};
网友评论