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; }