leetcode-29-Divide Two Integers-

2020-02-04  本文已影响0人  帘外五更风

Divide Two Integers

解题思路

一开始想的比较简单,直接减法做,毫无意外的超时了。
发现大学比较熟悉的二进制除法竟然一点点也想不起来的,并且,直接不会算了,真是越来越回去了。
先看一个二进制除法的例子:

// 十进制 10/3 -> 1010 / 11
二进制除法

从上图可以看出此二进制除法的过程(其实与十进制除法类似),通过不断地除数左移和减法实现了此除法过程,因此,类似的,本题中的除法算法可以描述如下:

class Solution {
public:
    int divide(int dividend, int divisor) {
        if(dividend == INT_MIN && divisor == -1)
            return INT_MAX;
        if(divisor == 0) return 0;

        long long int a = abs((long long int)dividend), b = abs((long long int)divisor);
        long long int result = 0;
        int c = 32;
        while(c) {
            c--;
            long long int t = b << c;
            result <<= 1;
            if(a >= t) {    
                a -= t;
                result += 1;
            } 
        }
        
        if((dividend >= 0) ^ (divisor >= 0)) result = -result;
        return result;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读