不用乘法,除法和mod运算符来分两个整数。 如果溢出,则返回MAX_INT。

来源:互联网 发布:淘宝那家动漫海报好 编辑:程序博客网 时间:2024/05/29 04:33

本题源自leetcode  29

------------------------------------------------------

思路: 1 先判断溢出条件  1除数为0  2 被除数最小,切除数是-1

2  求除数和被除数是否同号

3 取 绝对值。除法运算相当于减法运算。每次,将除数左移 1位 相当于乘以 2.。减少做减法的次数。

代码:

 int divide(int dividend, int divisor) {        if(!divisor || (dividend == INT_MIN && divisor == -1))            return INT_MAX;        int sign = ((divisor < 0) ^ (dividend < 0)) ? -1 : 1;        long long dvd = labs(dividend);        long long dvi = labs(divisor);        int res = 0;        while(dvd >= dvi){            long long tmp = dvi;            int count = 1;            while(dvd >= (tmp << 1)){                tmp = tmp << 1;                count = count << 1;            }            dvd -= tmp;            res += count;        }        return sign*res;    }


阅读全文
0 0
原创粉丝点击