69. Sqrt(x)

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;
    }
};

Result

69. Sqrt(x).png

你可能感兴趣的:(69. Sqrt(x))