intleft=0, right = x / 2; while (left < right) { intmid= left + (right - left + 1) / 2; // 向右取整,如 left = 1, right = 2 时,若不向上取整,则会使 left 被赋值为自身,导致死循环 if (mid <= x / mid) { left = mid; // 此时 mid 可能为答案,不能加 1, 下一轮搜索区间为:[mid, right] } else { right = mid - 1; } }