leetcode 29. Divide Two Integers
2017-08-15 19:15
393 查看
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
解:这一题首先考虑一般情况,在不适用除法,乘法以及模运算的情况下进行整数的除法运算。可以想象使用位移运算。
使用Leetcode上的讲解,假设15除以3,由于15大于3,将3进行左移一位6,15还大于6,再6左移一位为12,15还大于12,将12左移一位为24,此时15小于24,截止到目前为止3进行了两次左移,也就是4倍,如何得到倍数4呢?只要将1进行左移两位即可。这时余数为15-3*4=3.接着再考虑余数和3的除法,同上。
If it is overflow, return MAX_INT.
解:这一题首先考虑一般情况,在不适用除法,乘法以及模运算的情况下进行整数的除法运算。可以想象使用位移运算。
使用Leetcode上的讲解,假设15除以3,由于15大于3,将3进行左移一位6,15还大于6,再6左移一位为12,15还大于12,将12左移一位为24,此时15小于24,截止到目前为止3进行了两次左移,也就是4倍,如何得到倍数4呢?只要将1进行左移两位即可。这时余数为15-3*4=3.接着再考虑余数和3的除法,同上。
class Solution { public: int divide(int dividend, int divisor) { if(!divisor || (dividend == INT_MIN && divisor == -1)) return INT_MAX; int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1; long long dd = labs(dividend); long long dr = labs(divisor); int res = 0; while(dd >= dr){ long long temp = dr, multiple = 1; while(dd >= (temp << 1)){ temp <<= 1; multiple <<= 1; } dd -= temp; res += multiple; } return sign == 1 ? res : -res; } };
相关文章推荐
- leetcode 29. Divide Two Integers
- [leetcode]29. Divide Two Integers
- Leetcode刷题记——29. Divide Two Integers(整数相除Divide two integers without using multiplication, division)
- leetcode 29. Divide Two Integers 做除法
- leetcode 29. Divide Two Integers
- leetcode:29. Divide Two Integers
- LeetCode 29. Divide Two Integers
- leetcode 29:Divide Two Integers
- 【leetcode】29. Divide Two Integers
- 【LeetCode 29】Divide Two Integers
- LeetCode 29. Divide Two Integers
- Leetcode 29 Divide Two Integers 位操作的巧妙运用
- leetcode 29. Divide Two Integers
- LeetCode 29. Divide Two Integers
- [leetcode 29] Divide Two Integers
- LeetCode - 29. Divide Two Integers
- leetcode 29. Divide Two Integers
- [leetcode 29] Divide Two Integers
- leetcode 29. Divide Two Integers
- 个人记录-LeetCode 29. Divide Two Integers