首页 > 其他 > 详细

leetcode29 两数相除 int 与移位

时间:2019-11-01 16:52:17      阅读:96      评论:0      收藏:0      [点我收藏+]

难受啊

考虑越界

考虑dividend为-2^31,用负数移位运算

class Solution {
public:
    int divide(int dividend, int divisor) {
        
        if(dividend == divisor) 
            return 1;
        if(divisor == INT_MIN) 
            return 0;
        if(dividend==INT_MIN&&divisor==-1)
            return INT_MAX;
        if(dividend==INT_MIN&&divisor==1)
            return INT_MIN;
        int flag=(dividend>0)^(divisor>0);
    if (dividend > 0)
        dividend = -dividend;
    if (divisor > 0)
        divisor = -divisor;
    int n = 0;
    int count = 0;
    int temp = abs(divisor);
    int i;
    while (dividend <= divisor)
    {
        if (n == 31)
            break;
        i = -(temp << n);
        
        if (dividend > i)  //看成正数就是不够减
        {
            n--;
            if (n < 0)
                break;
        }
        else
        {
            dividend = dividend - i;
            count = count + (1 << n);
            if (dividend <= i)   //设i=1,2,4,8,...2^30 相加为2^31-1,此时n=30,若dividend还剩1,不加判断会导致上面temp<<31,越界
            {
                n++;
            }
        }
    }
        return flag ? -count : count;
    }
};

 

leetcode29 两数相除 int 与移位

原文:https://www.cnblogs.com/lqerio/p/11777155.html

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