难度:3
这道题有些意思,不用乘法,除法和模运算实现除法
时间复杂度O(logn)
解法:
我的做法是
除数不断乘以2(加法),直到接近被除数,最后做个处理,注意溢出,轻松愉悦的一道题
class Solution
{
public:
int divide(int argv1, int argv2)
{
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
long long dividend=argv1;
long long divisor=argv2;
int sign=0;//0+
if(dividend<0)
{
sign=~sign;
dividend=-dividend;
}
if(divisor<0)
{
sign=~sign;
divisor=-divisor;
}
if(divisor>dividend)
{
return 0;
}
int x=1;//系数
long long xdivisor=divisor;
while(xdivisor<=dividend)
{
if(xdivisor+xdivisor == dividend)
{
if(sign == -1) return -(x+x);
return x+x;
}
else if(xdivisor+xdivisor > dividend)
{
if(sign == -1) return -x-divide(dividend-xdivisor,divisor);
return x+divide(dividend-xdivisor,divisor);
}
else
{
x+=x;
xdivisor+=xdivisor;
}
}
}
};