[leetcode_29]Divide Two Integers

模拟整数除法,不能用乘法,模,除法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public:
    double exp[100];
    int divide(int dividend, int divisor) {
        return divided(dividend, divisor);
    }
private:
    int divided(double dividend, double divisor) {
        int flag = 1;
        if((dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0))
            flag = -1;
        if(dividend < 0) {
            dividend = abs(dividend);
        }
        if(divisor < 0) {
            divisor = abs(divisor);
        }
        int i = 0;
        exp[i++] = divisor;
        while(exp[i-1] < dividend) {
            exp[i++] = exp[i-1] + exp[i-1];
        }
        int ans = 0;
        i--;
        while(i >= 0) {
            if(dividend >= exp[i]) {
                ans += (int)pow(2.0, i);
                dividend -= exp[i];
            } 
            else {
                i--;
            }
        }
        if(flag == -1) return ~ans + 1;
        else return ans;
    }
};
Licensed under CC BY-NC-SA 4.0