public static int sqrt(int a) { if (a < 0 || a == 0 || a == 1) return a; int startNum = 0; int endNum = a; for (; startNum + 1 < endNum; ) {//保证整数情况下,不相等 int mid = (startNum + endNum) >> 1; if ((long) mid * mid < a) { 转换成long是防止,整型相乘后int溢出 startNum = mid; } else if ((long) mid * mid > a) { endNum = mid; } else { return mid; } } return startNum; }