leetcode: Divide Two Integers

来源:互联网 发布:阿里推荐算法负责人 编辑:程序博客网 时间:2024/04/30 14:24

将因子不断乘以2(可以通过移位实现,同时结果也从1开始不断移位加倍),然后和被除数比较,等到大于被除数一半了,就从被除数中减去,将因子个数叠加入结果中。然后在剩下的被除数中采用同样的方法减去小于其一半的因子和,循环往复

必须要unsigned int

class Solution {public:    int divide(int dividend, int divisor) {        assert( divisor != 0);        int res = 0;        bool neg = (( dividend ^ divisor) >> ( sizeof(int) * 8 - 1)) ? false : true;        unsigned tdividend = abs(dividend);        unsigned tdivisor = abs(divisor);        while( tdividend > tdivisor){            int factor = 1;            unsigned tmp = tdivisor;            while( (tmp<<= 1) < tdividend){                factor <<= 1;            }            tdividend -= ( tmp >>= 1);            res += factor;        }        if( tdividend == tdivisor)            ++res;        return neg ? res : -res;    }};


0 0
原创粉丝点击