leetcode 29. Divide Two Integers

题目链接

计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回INT_MAX。

首先判断越界的情况, 如果除数为0, 显然越界。 还有一种是 被除数为-2147483648, 除数为-1, 这样结果为2147483648, 越界。

不能使用除法的话, 就只能用减法。  但是一个一个减显然太慢, 所以可以用二进制, 具体的方法看代码。

class Solution {
public:
    int divide(int dividend, int divisor) {
        if(dividend == INT_MIN && divisor == -1)
            return INT_MAX;
        if(divisor == 0)
            return INT_MAX;
        unsigned int did = abs(dividend);
        unsigned int dis = abs(divisor);
        int ans = 0;
        while(did >= dis) {
            long long tmp = dis;
            int i;
            for(i = 0; tmp<=did; i++) {
                tmp <<= 1;
            }
            ans += (1<<(i-1));
            did -= (dis<<(i-1));
        }
        return (dividend>0 ^ divisor>0)?-ans:ans;       //如果异或为0说明同号
    }
};

 

posted on 2016-01-11 22:21  yohaha  阅读(178)  评论(0编辑  收藏  举报

导航