整数除法java实现

class Solution {
    //本题要求不能使用*,/,%符号那我们只能用最原始的方式来做了,a能减多少个b是的b
    //但是这种做法的缺点在于时间复杂度为O(a),我们改进以下索性让a先减去b的一个2n方倍的小于a的最大数,然后计算出a减去了2n方个b如此循环,这样做将时间复杂度减到O(loga),
    //如何解决正负号的问题呢,我们只能将两个数全部转化为负数来做(不转化为正号的原因在于最小的一个负号转化为正号会出现溢出的情况),我们使用一个标志位来最终判断最终结果的负号。
    public int divide(int a, int b) {
        //首先判断溢出的情况
        if(a == 0x80000000 && b == -1){
            return Integer.MAX_VALUE;
        }
        //首先要做的是将除数和被除数都转化为负号,并且使用一个标志位用于判断最终的结果
        int mark = 2;
        int result = 0;
        if(a > 0){
            mark--;
            a = -a;
        }
        if(b > 0){
            mark--;
            b = -b;
        }
        //判断结束之后使用循环的方式做除法
        while(a <= b){
            int value = b;
            int step = 1;
            while(value > 0xc0000000 && value + value >= a){
                value = value + value;
                step = step + step;
            }
            result = step + result;
            a = a - value;
        }
        //最终处理除结果
        if(mark !=  1){
            return result;
        }else{
            return -result;
        }
    }
}

你可能感兴趣的:(java,缓存,链表,数据结构)