剑指 Offer II 001. 整数除法

嗯。。。用的加法,注意a为最大值 b为1或者-1,还有a为负数最小值就行

也可以用位运算  << 相当于 * 2呗

其他的可以用sum + sum <= abs(a) 来优化

class Solution {
public:
    int divide(int a, int b) {
        long long A = a;
        long long B = b;
        if(B == 1) return A;
        if(B == -1)
            if(A == -2147483648) return 2147483647;
            else return -A;
        bool flag1 = 0, flag2 = 0;
        if(A < 0) flag1 = 1;
        if(B < 0) flag2 = 1;
        A = abs(A);
        B = abs(B);
        long long cnt = 0;
        long long sum = 0;
        while(sum + sum <= A)
        {
            sum += B;
            cnt++;
        }
        cnt *= 2;
        sum += sum;
        while(sum > A)
        {
            cnt--;
            sum -= B;
        }

        if(!flag1 && flag2 || flag1 && !flag2)
            cnt = -cnt;
        return (int)cnt;
    }
};

 

posted @ 2022-03-27 23:26  WTSRUVF  阅读(15)  评论(0编辑  收藏  举报