题目
Given two integers dividend
and divisor
, divide two integers without using multiplication, division and mod operator.
Return the quotient after dividing dividend
by divisor
.
The integer division should truncate toward zero.
Example 1:
Input: dividend = 10, divisor = 3 Output: 3
Example 2:
Input: dividend = 7, divisor = -3 Output: -2
分析:不能用除法乘法取模,唯一想到的就是减法。逐次减去效率很低,这里用位运算!
代码:
100.00% 100.00%
class Solution {
public:
int divide(int dividend, int divisor) {
long dd=abs((long)dividend);
long dr=abs((long)divisor);
long res=0;
while(dd>=dr){
//逐次做减法,效率很低!
//dd-=dr;
//++res;
//用位运算,效率变高!
long temp=dr,n=1;
while(temp<<1<=dd){
temp<<=1;
n<<=1;
}
dd-=temp;
res+=n;
}
int sign=dividend>0^divisor>0?0:1;
if(sign==1){
if(res>INT_MAX) res=INT_MAX;
return res;
}else return ~(res-1);
}
};