LeetCode 29.Divide Two Integers
2015-02-13 16:23
423 查看
题目:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析与解答:
不能用乘法,所以只能用位运算了。利用类似于二分法,比如被除数是48,除数是7,用除数每次乘以2,7*2 = 14, 14 *2 = 28,28*2 = 56 因为56>48,所以可以判断 7*4 = 28 ,我们保留4;接下来再计算(48 - 28 )/ 7 ,即20 / 7,由于 7*2 = 14 , 14*2 = 48 >28;所以我们保留2,再计算(20-14)/7; 6/7 = 0;所以不用算了, 前面步骤保留下来的4+2 = 6就是结果。需要注意的是边界问题,由于需要进行位运算,所以把int类型转换为long
long 来计算,返回结果的时候再换成int。
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
分析与解答:
不能用乘法,所以只能用位运算了。利用类似于二分法,比如被除数是48,除数是7,用除数每次乘以2,7*2 = 14, 14 *2 = 28,28*2 = 56 因为56>48,所以可以判断 7*4 = 28 ,我们保留4;接下来再计算(48 - 28 )/ 7 ,即20 / 7,由于 7*2 = 14 , 14*2 = 48 >28;所以我们保留2,再计算(20-14)/7; 6/7 = 0;所以不用算了, 前面步骤保留下来的4+2 = 6就是结果。需要注意的是边界问题,由于需要进行位运算,所以把int类型转换为long
long 来计算,返回结果的时候再换成int。
class Solution { public: int divide(int dividend, int divisor) { if(divisor == 0)return INT_MAX; int flag = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0); long long absDivisor = divisor > 0 ? (long long)divisor : -(long long)divisor; long long absDividend = dividend > 0 ? (long long)dividend : -(long long)dividend; long long result = 0; while(absDividend >= absDivisor) { long long tempRes = absDivisor; long long i = 1; while(tempRes <= absDividend) { tempRes <<= 1; i <<= 1; } absDividend = absDividend - (tempRes >> 1); result = result + (i >> 1); }//while if(flag > 0) result = -result; if(result > INT_MAX || result < INT_MIN) return INT_MAX; return (int)result; } };
相关文章推荐
- LeetCode 29. Divide Two Integers
- leetcode 29. Divide Two Integers
- leetcode 29. Divide Two Integers
- [Leetcode 87] 29 Divide Two Integers
- leetcode 29. Divide Two Integers
- leetCode 29.Divide Two Integers (两整数相除) 解题思路和方法
- [leetcode: Python]29. Divide Two Integers
- [Leetcode]29. Divide Two Integers @python
- 【LeetCode】29. Divide Two Integers
- LeetCode *** 29. Divide Two Integers(binary search)
- 【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