leetcode 29. Divide Two Integers
2016-01-11 22:21
316 查看
题目链接
计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回INT_MAX。
首先判断越界的情况, 如果除数为0, 显然越界。 还有一种是 被除数为-2147483648, 除数为-1, 这样结果为2147483648, 越界。
不能使用除法的话, 就只能用减法。 但是一个一个减显然太慢, 所以可以用二进制, 具体的方法看代码。
计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回INT_MAX。
首先判断越界的情况, 如果除数为0, 显然越界。 还有一种是 被除数为-2147483648, 除数为-1, 这样结果为2147483648, 越界。
不能使用除法的话, 就只能用减法。 但是一个一个减显然太慢, 所以可以用二进制, 具体的方法看代码。
class Solution { public: int divide(int dividend, int divisor) { if(dividend == INT_MIN && divisor == -1) return INT_MAX; if(divisor == 0) return INT_MAX; unsigned int did = abs(dividend); unsigned int dis = abs(divisor); int ans = 0; while(did >= dis) { long long tmp = dis; int i; for(i = 0; tmp<=did; i++) { tmp <<= 1; } ans += (1<<(i-1)); did -= (dis<<(i-1)); } return (dividend>0 ^ divisor>0)?-ans:ans; //如果异或为0说明同号 } };
相关文章推荐
- ZYNQ HLS图像处理加速总结(一)——FPGA硬件部分
- Swift编程高级教程
- jfreechart-改变图片存储位置-客户端jsp页面查看服务器绘图
- 常见前端面试题
- Canvas类(画布)
- Swap Nodes in Pairs leetcode
- jquery学习随笔(JSON 和JSONP、jqxhr)
- 车辆管理系统之继续自己的任务(四)
- redis笔记一(入门基础)
- 高精度4位压缩法原理与实现
- Java Swing JTable 表格【10:表格使用编辑器DefaultTableCellRenderer】
- SPSS学习笔记之——二项Logistic回归分析
- COM学习笔记2_COM接口vbtl内存布局
- 软件工程总结
- 线性时间排序:计数排序
- 【Linux命令】Ubuntu14.04+QT5.2配置mysql
- 成绩表
- list 操作
- windows上使用image库
- 【UI基础】——提示框和警示框的实现