您的位置:首页 > 其它

Divide Two Integers

2016-03-11 14:28 405 查看
思路:不能单步减法,时间会超时。当第一次减完后被减数仍大减数,这时减数可采用2的指数增加,直到大于被减数后,被减数缩小,再次重新这个过程。

注意调试时,出现的错误:

int dividend = -2147483648;

long b=-dividend;(其实b仍等于 -2147483648,因为右边-dividend其实已经运算过后,越界后的值赋给左边)

还有循环内的b,count 仍要为long型,因为可能相加过后越界。

class Solution {
public:
int divide(int dividend, int divisor) {
int MAX_INT=2147483647;
if(divisor==0||(dividend==-(MAX_INT+1)&&divisor==-1)) return MAX_INT;
if(dividend==0) return 0;
int flag=1,count=1,a;
long long dend=dividend;
long long sor=divisor;
long long b;
int quotient=0;
if(dividend<0){ flag=-flag; dend=-dend;}
if(divisor<0){ flag=-flag; sor= -sor;}
if(dend<sor) return 0;
while(dend>=sor)
{
count=1;
b=sor;
while(b+b<=dend)
{
b+=b;
count+=count;
}
dend-=b;
quotient+=count;
}
if(flag<0) quotient=-quotient;
return quotient;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: