关闭

leetcode :Binary Search: Divide Two Integers(029)

81人阅读 评论(0) 收藏 举报
分类:

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.


算法

o(nlgn)



typedef long long ll;
class Solution {
public:
    int divide(int dividend, int divisor) {
        ll a = dividend >= 0 ? dividend : -(ll)dividend;
        ll b = divisor >= 0 ? divisor : -(ll)divisor;
        ll result = 0, c = 0;
        bool sign = (dividend > 0 && divisor < 0) ||
            (dividend < 0 && divisor > 0);

        while (a >= b) {
            c = b;
            for (int i = 0; a >= c; i++, c <<= 1) {
                a -= c;
                result += (1<<i);
            }
        }
        if (sign) {
            return max((ll)INT_MIN, -result);
        } else {
            return min((ll)INT_MAX, result);
        }
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:116056次
    • 积分:6821
    • 等级:
    • 排名:第3534名
    • 原创:589篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    最新评论