题目描述
给定两个整数,被除数 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;
}
};
该博客介绍了如何在不使用乘法、除法和模运算符的情况下,通过位操作和减法实现两个整数的除法。文章提供了一个C++解决方案,通过构建除数的幂次表并逐步减少被除数来求解商。这种方法适用于需要高效计算整数除法的场景。
252

被折叠的 条评论
为什么被折叠?



