NC32 #求平方根#
求平方根
http://www.nowcoder.com/practice/09fbfb16140b40499951f55113f2166c
二分查找。
注意点:
- right直接设置为
x/2
因为当x>4
时log2(x)<x/2
。 - 注意
int
溢出!判断middle
与x/middle
的关系,而不是middle*middle
与x
的关系。class Solution { public: int sqrt(int x) { if(x == 0) return 0; else if(x == 1 || x == 2 || x == 3) return 1; else { int left = 1, right = x / 2; while(left <= right) { int middle = (left + right) / 2; if(middle <= x / middle && (middle + 1) > x / (middle + 1)) return middle; if(middle < x / middle) left = middle + 1; else right = middle - 1; } } return -1; } };