题目描述
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
解:
class Solution {
public:
int divide(int x, int y) {
bool sign = (x>0 && y<0) || (x<0 && y>0);
if(x>0) x =-x;
if(y>0) y =-y;
vector<pair<int,int>> exp;
for(int i=y,j=-1;i>= x;i+=i,j+=j){
exp.push_back({i,j});
if(i< INT_MIN/2) break;
}
int ans = 0;
for(int i=exp.size()-1;i>=0;i--){
if(exp[i].first >=x){
ans += exp[i].second;
x -= exp[i].first;
}
}
if(sign) return ans;
if(ans == INT_MIN) return INT_MAX;
return -ans;
}
};