不用乘除法,求两个数相除,为什么这里非要转换成long型呢?

leetCode的 divide-two-integers
不用乘除法,求两个数相除


为什么非要把int转换成long型呢,一个int整除一个int 不是只会越除越小吗? 我不转换成long就AC 不了了?
求大神解答:



public int divide(int dividend, int divisor) throws Exception{
if(divisor==0)
throw new Exception("分母不能为0");
if(dividend==0)
return 0;
boolean flag =true;
if((dividend>0&&divisor<0)||(dividend<0&&divisor>0))
flag=false;
long pdividend=Math.abs((long)dividend);
long pdivisor=Math.abs((long)divisor);
long res =divideHelper(pdividend,pdivisor);
return (int)(flag?res:-res);
}
private long divideHelper(long dividend, long divisor){
if(dividend<divisor)
return 0;
long res=1;//表示的是sum中有多少个divisor
long harf=divisor;
while(harf+harf<=dividend){
harf+=harf;
res+=res;
}
return res+divideHelper(dividend-harf,divisor);
}

#笔试题目##Java#
全部评论
(-2147483648 / -1) 溢出
点赞 回复 分享
发布于 2018-08-02 08:33

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务