首页 > 其他 > 详细

29. Divide Two Integers

时间:2018-10-08 22:34:15      阅读:150      评论:0      收藏:0      [点我收藏+]

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.

Return the quotient after dividing dividend by divisor.

The integer division should truncate toward zero.

Example 1:

Input: dividend = 10, divisor = 3
Output: 3

Example 2:

Input: dividend = 7, divisor = -3
Output: -2

Note:

  • Both dividend and divisor will be 32-bit signed integers.
  • The divisor will never be 0.
  • Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 231 − 1 when the division result overflows.

AC code:

class Solution {
public:
    typedef long long ll;
    int divide(int dividend, int divisor) {
        if (dividend == INT_MIN && divisor == -1) return INT_MAX;
        int negative_nums = 0;
        ll num, ans;
        int res=0;
        if (dividend < 0) 
            negative_nums++;
        if (divisor < 0) 
            negative_nums++;
        ll l_dividend = abs((ll)dividend);
        ll l_divisor = abs((ll)divisor);
        while (l_dividend >= l_divisor) {
            num = l_divisor;
            ans = 1;
            while (1) {
                num = num << 1;
                if (l_dividend >= num) {
                    ans <<= 1;
                } else 
                    break;
            }        
            num = num>>1;
            l_dividend -= num;
            res += ans;
        }
        if (negative_nums%2 == 0)
            return res;
        else 
            return -res;
    }
};

Runtime: 12 ms, faster than 98.72% of C++ online submissions for Divide Two Integers.

 

29. Divide Two Integers

原文:https://www.cnblogs.com/ruruozhenhao/p/9757498.html

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