int Sqrt(int x ) { if(x < 2) return x; int left = 1, right = x / 2, mid = 0; while(left <= right) { mid = (left + right) / 2; if(x / mid == mid) return mid; else { if (x / mid < mid) right = mid - 1; else left = mid + 1; } } return right; }1. 用 x/ mid 与mid比较,而不是mid*mid与比较。因为mid*mid可能会溢出。
2.用right = x / 2,可以比right = x省时间。因为根号x小于等于x/2。
3.x / mid == mid并不等同于 mid * mid == x;因为x / mid可能是截断小数位得到的整数。