From : https://leetcode.com/problems/divide-two-integers/
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
class Solution {
public:
int divide(int dividend, int divisor) {
if(divisor == 0) return INT_MAX;
long long int d1 = dividend, d2 = divisor;
long long int flag = (d1>0)^(d2>0)?-1:1, ans=0;
d1 = abs(d1);
d2 = abs(d2);
if(d1 < d2) return 0;
vector<long long int> cnts;
vector<long long int> nums;
for(long long int n=1; d2<=d1; d2 <<= 1,n <<= 1) {
nums.push_back(d2);
cnts.push_back(n);
}
for(int i=nums.size()-1; i>=0; i--) {
if(d1>=nums[i]) {
ans += cnts[i];
d1 -= nums[i];
}
}
ans *= flag;
return -ans==INT_MIN?INT_MAX:ans;
}
};
class Solution {
public:
int divide(int dividend, int divisor) {
if(divisor == 0) return INT_MAX;
long long int d1 = dividend, d2 = divisor;
long long int flag = (d1>0)^(d2>0)?-1:1, ans=0;
d1 = abs(d1);
d2 = abs(d2);
while(d1 >= d2) {
for(long long int base=d2, n=1; base<=d1; base<<=1, n<<=1) {
if(base <= d1) {
d1 -= base;
ans += n;
}
}
}
ans *= flag;
return -ans==INT_MIN?INT_MAX:ans;
}
};