Divide Two Integers-不用'/' '*' '%'操作实现整数的除法

题目描述:

不用 '*' '/' 和 '%' 运算实现两个整数的除法

题目来源:http://oj.leetcode.com/problems/divide-two-integers/

题目分析:

例如 16 / 3,可以按照3的倍数来操作。 3 * 1 = 3, 3 * 2 = 6, 3 * 2 * 2 = 12 ...,而2 * 2等可以用位运算方式表示。

那么有16 - 3 = 13, 13 - 3 * 2 = 7, 而7 < 3 * 2 *2。可以迭代处理,再计算剩下的 7 / 3,依次进行。

位运算的典型应用

示例代码:

int divide(int dividend, int divisor) {
    long long a = abs((double)dividend), b = abs((double)divisor), ret = 0;
    while(a >= b) {
        for(long long c = b, i = 0; a >= c; ++i, c <<= 1) {
            a -= c;
            ret += 1 << i;
        }
    }

    return ((dividend ^ divisor) >> 31) ? -ret : ret;
}

 

posted @ 2014-02-25 10:44  代金桥  阅读(261)  评论(0编辑  收藏  举报