给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
链接:https://leetcode-cn.com/problems/divide-two-integers
思路:采用递归求解,注意开long long
class Solution {
public:
int Div(long long a,long long b)
{
long long temp=b;
int k=0;
if(a>=b) k=1;
while(a>=(temp*2))
{
temp=temp*2;
k=k*2;
}
if(k!=0) return k+Div(a-temp,b);//递归求解
else return 0;
}
int divide(int dividend, int divisor) {
bool vis;
if(dividend==-2147483648)
{
if(divisor==1) return -2147483648;
else if(divisor==-1) return 2147483647;
}
if(dividend==2147483647)
{
if(divisor==1) return 2147483647;
else if(divisor==-1) return -2147483648;
}
if((dividend<0&&divisor>0)||(dividend>0&&divisor<0)) vis=1;
else vis=0;
divisor=abs(divisor);
dividend=abs(dividend);
int k=0;
if(divisor<=dividend) k=1;
int ans=Div(dividend,divisor);
if(vis) ans*=-1;
return ans;
}
};