leetcode: Divide Two Integers
来源:互联网 发布:蒙古帝国和元朝知乎 编辑:程序博客网 时间:2024/06/01 19:53
转载来源: http://www.cnblogs.com/panda_lin/archive/2013/10/30/divide_two_integers.html
Problem: Divide two integers without using multiplication,division and mod operator.
思路:
典型的二分法。以87除4举例, (4 * 2 = 8) => (8 * 2 = 16) => (16 * 2 = 32) => (32 * 2) => 64,因为64 * 2 = 128大于87,现在我们可以确定4 * 16 = 64小于87,那么再处理87 - 64 = 23,23除4的话用上面方法可以得到5,还余3,因为小于4,扔掉,所以最后结果是16 + 5 = 21。因为需要考虑溢出问题,所以先把数字转换为unsigned long long,最后转成int返回。
class Solution {public: long long internalDivide(unsigned long long dividend, unsigned long long divisor) { if (dividend < divisor) { return 0; } long long result = 1; unsigned long long tmp = divisor, left; while (tmp <= dividend) { left = dividend - tmp; tmp <<= 1; if (tmp > dividend) { break; } else { result <<= 1; } } return result + internalDivide(left, divisor); } int divide(int dividend, int divisor) { unsigned long long _dividend = abs((long long)dividend), _divisor = abs((long long)divisor); bool positive = ((dividend >= 0) && (divisor > 0)) || ((dividend <= 0) && (divisor < 0)); return positive ? internalDivide(_dividend, _divisor) : (-1) * internalDivide(_dividend, _divisor); }};
0 0
- LeetCode: Divide Two Integers
- [LeetCode]Divide Two Integers
- LeetCode: Divide Two Integers
- [LeetCode] Divide Two Integers
- [Leetcode] Divide Two Integers
- LeetCode Divide Two Integers
- 【leetcode】Divide Two Integers
- [LeetCode]Divide Two Integers
- LeetCode-Divide Two Integers
- LeetCode: Divide Two Integers
- Divide Two Integers - leetcode
- Leetcode: Divide Two Integers
- LeetCode:Divide Two Integers
- leetcode Divide Two Integers
- LeetCode Divide Two Integers
- LeetCode | Divide Two Integers
- Leetcode: Divide Two Integers
- Divide Two Integers -- LeetCode
- linux上ln命令详细说明
- HDOJ 题目4508湫湫系列故事——减肥记I(完全背包)
- 虎嗅9.2
- Android:Layout_weight的深刻理解
- 利用poi对dotx指定字符进行替换
- leetcode: Divide Two Integers
- C/C++
- CMD与AMD的区别
- 墙上时钟时间 ,用户cpu时间 ,系统cpu时间的理解
- 画圆角
- Oracle 数据库启动 startup和startup force的区别
- 编写安全代码:小心volatile的原子性误解
- 豆瓣9.2
- C# 异常处理-finally 和 return