我理解本题是考察基于加减实现除法,代码如下:
class Solution { public: //只用加减号实现除法, //不用加减号实现除法; int divide(int dividend, int divisor) { // if(dividend==INT_MIN&&divisor==-1){ return INT_MAX; } long dvd=labs(dividend);long dvs=labs(divisor);long ans=0; int sign=dividend^divisor; for(int i=31;i>=0;i--){ if((dvd>>i)>=dvs){ dvd-=dvs<<i; ans+=1<<i; } } if(sign<0) ans=-ans; return ans; } };
如果单纯基于位运算呢?加减也依靠位运算如何避免溢出?