题目描述
思路分析
二进制
把商拆为二进制组,然后对二进制组从大到小枚举。
代码实现
class Solution {
public:
int divide(int x, int y) {
typedef long long ll;
vector<ll> ext;
bool is_minus=false;
if(x<0&&y>0||x>0&&y<0) is_minus=true;
ll a=abs(ll(x)),b=abs(ll(y));
for(ll i=b;i<=a;i=i+i) ext.push_back(i);
ll res=0;
for(int i=ext.size()-1;i>=0;i--){
if(a>=ext[i]){
a-=ext[i];
res+=1ll<<i;
}
}
if(is_minus) res=-res;
if(res>INT_MAX||res<INT_MIN) res=INT_MAX;
return res;
}
};