Description:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Note:
None
Solution:
Analysis and Thinking:
題目要求在不使用乘法、除法的情況下,實現兩個整數的除法。第一反應就是利用移位操作。
Steps:
1.判斷除數是否爲0,如果是,返回無窮大值
2.定義flag值,並依據除數被除數的正負符號,改變flag的符號
3.取得除數、被除數的絕對值,以進行移位操作
4.將除數不斷左移,然後不斷從被除數中除去移位部分
5.當除數移位到比被除數小時,結束循環,返回結果
Codes:
class Solution {
public:
int divide(int dividend, int divisor) {
if(divisor==0){
return INT_MAX;
}
if(dividend==INT_MIN &&divisor==-1) return INT_MAX;
int flag=1;
if(divisor<0) flag=-flag;
if(dividend<0) flag=-flag;
unsigned long b=abs((long)divisor);
unsigned long a=abs((long)dividend);
int result=0;
while(a>=b){
long temp=0;
int i;
for(i=0;temp<=a;i++)
{
temp=b<<i;
}
result=0x1<<(i-2)+result;
temp=temp>>1;
a=a-temp;
}
return result*flag;
}
};
Results: