LeetCode OJ:Divide Two Integers(两数相除)
2015-11-05 21:13
519 查看
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
两数相除,不能用*,/,% 那么只能用位移运算了,注意边界条件防止溢出,代码如下:
PS:这题溢出情况相当恶心。
If it is overflow, return MAX_INT.
两数相除,不能用*,/,% 那么只能用位移运算了,注意边界条件防止溢出,代码如下:
class Solution { public: int divide(int dividend, int divisor) { int sign1 = dividend > 0 ? 1 : -1; int sign2 = divisor > 0 ? 1 : -1; long long d1 = abs(static_cast<long long>(dividend)); long long d2 = abs(static_cast<long long>(divisor)); int res = 0; while(d1 >= d2){ long long tmp = d2; for(int i = 0; d1 >= tmp; ++i){ d1 -= tmp; tmp <<= 1; res += 1LL << i; } } if(sign1 == sign2){ if(res == INT_MIN) return INT_MAX; return res; }else return res * -1; } };
PS:这题溢出情况相当恶心。
相关文章推荐
- AngularJs ngApp、ngBind、ngBindHtml、ngNonBindable
- 代理设计模式
- hihocoder #1089 : 最短路径·二:Floyd算法
- 冒泡排序语法树接下
- 简单的光照模型
- Android读取通讯录联系人
- javascript中对象的深度克隆
- Openstack API常用命令
- 【AMPPZ2014】【BZOJ4146】Divisors
- 不变模式
- python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用
- 2015-10-29 ado.net 1
- Comparable接口的实现和使用
- 加油,day2
- 使用rand5()生成rand7()
- Android-Uiautomator:keyCode快速输入
- Error inflating class fragment解决方法
- 进黑马的第一天
- IntelliJ IDEA常用快捷键
- 九宫格