首页 » 编程之美 » 正文

[leetcode_29]Divide Two Integers

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

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;
    }
};

本文共 2 个回复

发表评论