Leetcode|Divide Two Integers
阿新 • • 發佈:2018-11-14
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
位操作,詳見我的另一篇講解位操作的博文。
此題在leetcode的通過率只有15%,主要是溢位的問題需要好好考慮。
int divide(int x,int y){
assert(y!=0);
bool neg=(x<0)^(y<0);
unsigned int x1=x>0?x:-x;
unsigned int y1=y >0?y:-y;
long long pos=y1;
unsigned int res=0;
int bit=0;
for(;pos<=x1;bit++)
{
pos=pos<<1;
}
//if(x1>INT_MAX) return bit;
while(x1>=y1){
if(x1>=pos){
res|=1<<bit;
x1-=pos;
}else{
pos>>=1;
bit--;
}
}
if (res>INT_MAX&&!neg) return INT_MAX;
if(neg) res=-res;
return (int)res;
}