题意:不使用乘、除和取余的操作。来做除法
思路:
1、使用减法,每将dividend减divisor,count加1,直到剩余的数字小于divisor。最后超时了。
2、改用移位的方法,类似于我们手动计算除数时是从最高位开始。最后通过。
class Solution {
public:
int divide(int dividend, int divisor) {
long long a=dividend;
long long b=divisor;
long long c=abs(a);
long long d=abs(b);
long long count=0;
bool positive=true;
if(dividend<0&&divisor>0)
{
positive=false;
}
if(dividend>0&&divisor<0)
positive=false;
while(c>=d)
{
long long x=d;
for(int i=0;c>=x;i++,x<<=1)
{
c-=x;
count+=1<<i;
}
}
//当被除数是0x80000000,除数是-1,count=2147483648,超出了整型数的表示范围,
//所以最后返回MAX_INT
if(positive&&count>2147483647) return 2147483647;
else return positive?count:(-count);
}
};