LeetCode 29.两数相除

class Solution {
public:

    int quickadd(long a,long b)//不能用除法所以用快速加,和快速幂一个思路
    {
        if(a<b) return 0;//终止条件
        long temp_b=b;
        int temp_beishu=1;
        while(a>(temp_b+temp_b))
        {
            temp_b+=temp_b;
            temp_beishu+=temp_beishu;
        }
        return temp_beishu+quickadd(a-temp_b,b);//递归

    }

    int divide(int dividend, int divisor) {
        if(dividend == 0) return 0;
        if(divisor==1) return dividend;
        if(divisor==-1)//判断溢出边界,实际上只有一种溢出可能
        {
            if(dividend==INT_MIN) return INT_MAX;
            else return -dividend;
        } 
        long a=dividend;
        long b=divisor;
        bool sign=false;
        if(dividend<0&&divisor>0|| dividend>0&&divisor<0) sign=true;
        a=a<0?-a:a;//统一符号为正号。
        b=b<0?-b:b;

        return sign?-quickadd(a,b):quickadd(a,b);

    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)