Given a non-negative integer `x`

, compute and return *the square root of* `x`

.

Since the return type is an integer, the decimal digits are **truncated**, and only **the integer part** of the result is returned.

**Note: **You are not allowed to use any built-in exponent function or operator, such as `pow(x, 0.5)`

or `x ** 0.5`

.

**Example 1:**

**Input:** x = 4

**Output:** 2

**Example 2:**

**Input:** x = 8

**Output:** 2

**Explanation:** The square root of 8 is 2.82842..., and since the decimal part is truncated, 2 is returned.

**Constraints:**

`0 <= x <= 231 - 1`

Solution:

Making use of** binary search** to find out the number, whose power of 2 is mostly closed to x value. To assign the **halved value** of *num* & *left smallest integer* into *mid_val* variable, using its power of 2 to compare whether it is greater than *x* or not. If its value is greater, assign the middle value into *ans* variable and increment the value of *left smallest number* as well. If not, then decrement the value of *num*.