给定两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend
除以除数 divisor
得到的商。
示例 1:
输入: dividend = 10, divisor = 3
输出: 3
示例 2:
输入: dividend = 7, divisor = -3
输出: -2
说明:
- 被除数和除数均为 32 位有符号整数。
- 除数不为 0。
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
class Solution {
public:
int divide(int dividend, int divisor) {
int flag=1;
if(dividend<0)
flag=-flag;
if(divisor<0)
flag=-flag;
long long num1=abs((long long)dividend);
long long num2=abs((long long)divisor);
long long result=0;
if(num1<num2)
return 0;
if(divisor==0)
return INT_MAX;
while(num1>=num2)
{
long long temp=num2;
int count=0;
while(temp<=num1)
{
temp=temp<<1;
count++;
}
result=result+((long long)1<<(count-1));
num1=num1-(num2<<(count-1));
}
if(flag==1&&result>INT_MAX)
return INT_MAX;
if(flag==-1&&result>INT_MAX)
return INT_MIN;
return result*flag;
}
};