leetcode - Divide Two Integers

来源:互联网 发布:孤岛惊魂4优化太垃圾 编辑:程序博客网 时间:2024/06/05 19:50

Divide two integers without using multiplication, division and mod operator.

//这题要求不要用“/”来直接计算两个数的相除的值,那么,可以利用减法和位运算来实现。//比如,将1右移,可以得到 2 4 8 16 32...直到找到一个比divisor小且最大数tmp,然后//剩下的就是利用divisor-tmp,然后再判断div是否小于这个数。如果,小于重复上面的步骤。否则,得到最后的结果.class Solution {public:    int divide(int dividend, int divisor) {int pre = 1;if((long long)dividend * divisor < 0) pre = -1;long long tmp = 0;long long divid = abs((long long)dividend);long long div = abs((long long)divisor);int res = 0;while(div <= divid){tmp = div;int cnt = 1;while((tmp <<= 1) < divid){cnt <<= 1;}res += cnt;divid -= (tmp >>= 1);}#if 1std::cout << res * pre << std::endl;#endif // 1return res * pre;    }};

0 0