Divide Two Integers

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

题的思路不难,但是没有注意数据的大小问题。之前一直用int做,一直不能通过。换成long long才通过。

class Solution {
public:
    int divide(int dividend, int divisor) {
        int re = 0;
        int flag =0;
        long long end = dividend ,sor = divisor;
        if(dividend <0)
        {
            end = 0- end;
            flag ++;
        }
        
        
        if(divisor <0)
        {
            sor = 0- sor;
            flag++;
        }
        
        if(sor >end)return 0;
        
        map<double , int> ma; // value , times
        vector<double> a;
        
        long long  temp = sor;
        a.push_back(sor);
        ma[temp] = 1;
        int i =1;
        while(temp < end)
        {
            temp = temp + temp;
            i = i+ i;
            a.push_back(temp);
            ma[temp] = i ; 
        }
        long long left = end;
        int j = a.size()-1;
        while(left >= sor)
        {
            
            while(left - a[j] >=0)
            {
                left = left -a[j];
                re += ma[a[j]];
            }
            j--;
            if(j < 0)break;
        }
        if(flag == 1)
        return 0-re;
        
        return re;
    }
};

  

原文地址:https://www.cnblogs.com/pengyu2003/p/3713203.html