leetcode Divide Two Integers

题目:Divide Two Integers 

思考方式:刚开始无从下手,tag里的提示是binary search 也就是二分搜索,以前的二分搜索都是知道两端开始向中间靠拢。这里的二分搜索是向右方靠拢,  然后循环的地方在如果越界,就在最后的区间内寻找,可见这种二分搜索的效率是不如那种的。但是这依然是O(lgn)的算法,所以说还是有不错的运行效率的。

如图:

代码:

#include<iostream>

using namespace std;

int divide(int dividend, int divisor) {
    long long l = dividend;
    long long r = divisor;
    if (l == -2147483648&&r==-1){
        return INT_MAX;
    }
    if (l == 0 || r == 0)
        return 0;
    int flag = 0;
    if ((l < 0 & r>0) || (l > 0 && r < 0))
        flag = 1;
    long long a = abs(l);
    long long b = abs(r);

    if (b > a)
        return 0;
    long long final = 0;
    while (b <= a){
        long long sum = b;
        int n = 1;
        while (sum+sum<= a){
            sum = sum + sum;
            n += n;
        }
        final += n;
        a = a - sum;
    }
    if (flag)
        final = 0 - final;
    return final;
}

int main(){
    cout << divide(15, 3) << endl;
}
原文地址:https://www.cnblogs.com/chaiwentao/p/4448534.html