题意理解:
在不使用乘法、除法和求余运算的情况下计算两个整数相除的结果;
题目分析:
1. 注意整数的边界问题;
2. 使用移位或累加代替乘2操作;
3. 将变量扩展为long long数据类型进行中间计算(long类型可能也为32 bits);
4. 注意STL中abs()的强制类型转换;
解题代码:
class Solution {
public:
int divide(int dividend, int divisor) {
if(dividend==0 || divisor==0){
return 0;
}
long long div1=abs((long long)dividend);
long long div2=abs((long long)divisor);
cout<<"div1= "<<div1<<endl;
cout<<"div2= "<<div2<<endl;
long long ans=0;
while(div1>=div2){
long long preDiv2=-1;
long long sum=0;
while(div1>=div2){
if(preDiv2==-1){
sum+=1;
}else{
sum<<=1;
}
preDiv2=div2;
div2<<=1;
}
ans+=sum;
div1-=preDiv2;
div2=abs((long long)divisor);
}
if((dividend>0 && divisor>0) || (dividend<0 && divisor<0)){
cout<<"ans1= "<<ans<<endl;
if(ans>=2147483647){
ans=2147483647;
}
}else{
cout<<"ans2= "<<ans<<endl;
ans=0-ans;
if(ans<-2147483648){
ans=-2147483648;
}
}
return ans;
}
};