29. Divide Two Integers

来源:互联网 发布:大学生防网络诈骗 编辑:程序博客网 时间:2024/06/03 22:42

1.题目
 Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

2.分析
  这道题,主要数的处理,以及int数边界操作处理。
3.解题

public int divide(int dividend, int divisor) {    int max = Integer.MAX_VALUE;    int min = Integer.MIN_VALUE;    // 边界处理    if(divisor==0||dividend>max||dividend<min||divisor>max||divisor<min){        return max;    }    long one = Math.abs((long)dividend);    long two = Math.abs((long)divisor);    int flag = 1;    if(one<two||two==0){        return 0;    }    if(dividend>0&&divisor<0){        flag = -1;    }    if(dividend<0&&divisor>0){        flag = -1;    }    long result = dividehelper(one,two);    if(result>max){        if(flag==-1){            return min;        }else{            return max;        }    }    return (int)(flag*result);}public long dividehelper(long one,long two){    if(one<two){        return 0;    }    long sum = two;    long count = 1;    while((sum+sum)<=one){        sum += sum;        count += count;    }    return count+dividehelper(one-sum,two);}

4.总结
  这道题思路不难想到,但是在累加计数时,如果处理不当,会超时,这时候,如果联想到2的幂运算就知道,累加效率随着递增累加,效率越高,这时候就不会出现被除数绝对值远远大于除数绝对值,累加计数超时。

原创粉丝点击