概述
首先出现溢出的有两种可能性,除数为0;被除数为INT_MIN,除数为-1,先进行排除。
其次通过异或判断商的符号,通过循环每次添加一倍的除数,循环次数过多,每次采取对除数乘2进行运算,(乘二操作通过左移一位完成)
需要注意的是,每次做减法操作是在求取绝对值的除数和被除数上进行。
代码:
class Solution {
public:
int divide(int dividend, int divisor) {
if(divisor==0||(dividend==INT_MIN&&divisor==-1))
return INT_MAX;
bool flag = ((dividend<0)^(divisor<0))?false:true;
long long dividendnum = labs(dividend);
long long divisornum = labs(divisor);
int ans = 0;
while(dividendnum>=divisornum)
{
long long temp = divisornum;
int res = 1;
while(dividendnum>=(temp<<1))
{
temp <<=1;
res <<=1;
}
dividendnum -= temp;
ans += res;
}
return flag==true?ans:(-1)*ans;
}
};
最后
以上就是标致雨为你收集整理的Divide Two Integers 不用乘法,除法,取模符号进行除法运算的全部内容,希望文章能够帮你解决Divide Two Integers 不用乘法,除法,取模符号进行除法运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复