不用乘除法,求两个数相除,为什么这里非要转换成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#