Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
思路:采用累加法,设置一个sum和一个count,下面演示一下累加法的过程 比如26/5
sum=5,count=1 dividend=26;
sum=sum+sum=10 count=count+count=2 dividend=26;
sum=sum+sum=20 count=count+count=4 dividend=26;
sum=sum+sum=40>25 dividend=1;
count=5;
代码如下(已通过leetcode)
public class Solution {
public int divide(int dividend, int divisor) {
if(divisor==0) return Integer.MAX_VALUE;
if(dividend==0) return 0;
long tempdividend=dividend;
long tempdivisor=divisor;
tempdividend=Math.abs(tempdividend);
tempdivisor=Math.abs(tempdivisor);
if(tempdividend<tempdivisor) return 0;
long tempres=0;
long sum;
long count;
while(tempdividend>=tempdivisor) {
count=1;
sum=tempdivisor;
while(sum+sum<=tempdividend) {
sum=sum+sum;
count=count+count;
}
tempdividend=tempdividend-sum;
tempres=tempres+count;
}
//System.out.println(tempres);
if((dividend>0) ^ (divisor>0)) tempres=-tempres;
if(tempres>Integer.MAX_VALUE || tempres<Integer.MIN_VALUE) return Integer.MAX_VALUE;
else return (int)tempres;
}
}