首页 > 其他 > 详细

leetcode 29. Divide Two Integers

时间:2016-01-11 23:55:28      阅读:339      评论:0      收藏:0      [点我收藏+]

题目链接

计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回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说明同号
    }
};

 

leetcode 29. Divide Two Integers

原文:http://www.cnblogs.com/yohaha/p/5122773.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!