sqrt

Newton's method.

2147395599 is a weird input case... using double can pass test case in
leetcode.
sqrt_binarySearch

note that we use "long" datatype to handle potential multiplication of
huge integers (otherwise leetcode would report error for some test
cases)

and always return the smaller number of two potential integer
candidates, therefore return "end" pointer when they pass each other.