【Leetcode】之Divide Two Integers
来源:互联网 发布:java分销微商城源码 编辑:程序博客网 时间:2024/06/03 10:18
一.问题描述
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
二.我的解题思路
题目要求不用乘法,除法,取Mod运算来求解两个整数的除法,意味着只可以用加减法以及移位运算符。为了提高时间效率,很自然的想到采用移位运算符来使除法尽快接近被除数。最后测试通过的程序如下:
class Solution {public: int divide(int dividend, int divisor) { if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX; if (divisor == 1) return dividend; bool flag = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0); long dividend_abs = abs((long)dividend); long divisor_abs = abs((long)divisor); int result = 0; while (dividend_abs >= divisor_abs) { for (int i = 0; dividend_abs >= divisor_abs * (1 << i); i++) { dividend_abs -= divisor_abs * (1 << i); result += (1 << i); } } return flag ? 0 - result : result; }};
对于无符号整数,有符号整数的溢出问题:
对于有符号整数而言,假设INT_MAX为2147483647,那么INT_MIN为-2147483648.有符号整数的溢出并没有标准的定义,常见的是正整数溢出变成了负数。
对于无符号整数而言,在区间[0,max]之间变动,溢出则会将去做变为范围另一端的取值,这是在C++中有标准定义的。
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
- 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
- std::initializer_list in C++0x
- android编译分析之8—envsetup.mk
- 利用第三方开源框架 PullToRefreshListView 实现下拉刷新(从网上下载图片)
- 二叉树学习之二叉查找树 http://blog.csdn.net/callinglove/article/details/40707449
- java acm hdu 2083
- 【Leetcode】之Divide Two Integers
- 2015河南科技学院高校csdn俱乐部--网线制作
- Jquery插件
- 自动摘要算法
- 关于mysql函数GROUP_CONCAT 需要注意的地方
- ios初体验,终端命令
- 【C基础】#if、if、#ifdef、#if defined之间的区别
- css 背景属性background的使用方法
- Android 打开网络设置页面