将两个整数相除,要求不使用乘法、除法和 mod 运算符。
如果溢出,返回 2147483647
。
Yes
样例
标签
Expand
给定被除数 = 100
,除数 = 9
,返回 11
。
相关题目 Expand
分析:既然不能乘法和除法,那肯定就只能位操作了,然后如果用减法的话,太慢了,必须想点二进制的方法来加速,另外注意越界问题
代码:
class Solution {
public:
/**
* @param dividend the dividend
* @param divisor the divisor
* @return the result
*/
int divide(int dividend, int divisor) {
// Write your code here
bool resultGreatThanZero = true;
if(dividend>0&&divisor<0||dividend<0&&divisor>0)
resultGreatThanZero = false;
long long ret = 0;
long long d1 = abs((long long)dividend);
long long d2 = abs((long long)divisor);
while(d1>=d2)
{
long long temp = d2;
long long cnt = 1;
while(d1>=temp)
{
d1-=temp;
ret+=cnt;
cnt = cnt<<1;
temp = temp<<1;
}
}
if(!resultGreatThanZero)
ret*=-1;
if(ret<(long long)INT_MIN||ret>(long long)INT_MAX)
return INT_MAX;
return ret;
}
};