注意溢出问题

sqrt(x)中low, high, mid均要设为long类型,原因是在运行过程中若采用int类型,则mid*mid的结果采用int类型可能会溢出。

public class Solution {
    public int mySqrt(int x) {
        if (x < 0) {
            return -1;
        }
        long low = 0;
        long high = x;
        long mid = low + (high - low) / 2;
        while (low <= high) {
            mid = low + (high - low) / 2;
            if (mid * mid < x) {
                low = mid + 1;
            } else if (mid * mid > x) {
                high = mid - 1;
            } else {
                return (int)mid;
            }
        }
        return (int)high;
    }
}

 

posted on 2015-11-19 10:57  ShinningWu  阅读(84)  评论(0)    收藏  举报

导航