29. Divide Two Integers
来源:互联网 发布:java 0x00 转为数字 编辑:程序博客网 时间:2024/05/16 10:50
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
这道题……可以说是非常坑了……
首先是溢出问题,有两种情况会造成溢出,一个是divisor为零的情况,还有一种是INT_MIN/(-1)
的情况(因为 abs(INT_MIN) = INT_MAX + 1
)
其次就是算法的选择。最简单的方法很显然是不断地减去除数,直到剩下的数小于除数,但这种方法效率不高,会超时。
考虑另一种方法:除数*2和被除数比较,如果还小于除数就再乘二(左移一位)……直到大于被除数。这种方法和第一种方法相比就高效得多。
class Solution {public: int divide(int dividend, int divisor) { //处理溢出 if (divisor == 0 || dividend == INT_MIN && divisor == -1) return INT_MAX; bool isMinus = (dividend < 0 && divisor > 0 || dividend > 0 && divisor < 0); //用long long是为了避免abs(INT_MIN)溢出 long long dvd = labs(dividend); long long dvs = labs(divisor); int ans = 0; while (dvd >= dvs) { long long tmp = dvs, multiple = 1; while (dvd >= (tmp << 1)) { tmp <<= 1; multiple <<= 1; } dvd -= tmp; ans += multiple; } return isMinus ? (0 - ans) : ans; }};
阅读全文
0 0
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- 29. Divide Two Integers
- Python函数和方法的区别
- 我的规划规划
- C#类库:ini文件操作类
- Maven
- git 常用合并命令
- 29. Divide Two Integers
- K邻近算法
- Web Service
- Hardwood Species(poj2418 trie树)
- Ubuntu解决登录界面无限循环
- 文章标题
- JADE学习笔记3:Agent行为
- 【机器学习】MAP最大后验估计和ML最大似然估计区别
- CODEvs 2370 小机房的树 清流解法之树链剖分