leetCode:Divide Two Integers
2017-06-10 13:55
239 查看
Divide Two Integers
题目
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.
求两个数相除,但不允许使用乘法,除法和余数操作符
思路
最直观的方法是,用被除数逐个的减去除数,直到被除数小于0。这样做会超时。那么如果每次不仅仅减去1个除数,计算速度就会增加,但是题目不能使用乘法,因此不能减去k*除数,我们可以对除数进行左移位操作,这样每次相当于减去2^k个除数,如何确定k呢,只要使 (2^k)除数 <= 当前被除数 <(2^(k+1))除数.
这道题还要考虑溢出问题
AC代码
public class Solution { public int divide(int dividend, int divisor){ //定义为long防止负数转换为正数时溢出 long divd = dividend,divs = divisor; if(divs < 0) divs = -divs; if(divd < 0) divd = -divd; long res = 0; while(divd >= divs){ long a = divs; int count = 0; //找到(2^k)*除数 <= 当前被除数 <(2^(k+1))*除数. for(int i = 1; a <=divd; i++){ a<<=1; count++; } //得到2^k res += (1 << (count - 1)); //被除数减去(2^k)*除数,进入下一次循环判断条件 divd -= (divs << (count - 1)); } //当答案为正 且 强制转换为负数时 说明溢出了 返回MAX_INT if(!(dividend>0 ^ divisor>0) && (int)res==-2147483648){ return 2147483647; } //判断答案是正是负 return (dividend>0 ^ divisor>0) ? (int)-res : (int)res; } }
相关文章推荐
- [leetcode] 29. Divide Two Integers
- LeetCode - 29. Divide Two Integers
- leetcode - Divide Two Integers
- LeetCode Divide Two Integers
- [leetcode 29]divide two integers
- Divide Two Integers leetcode java
- python写算法题:leetcode: 29. Divide Two Integers
- LeetCode 29. Divide Two Integers
- [LeetCode] Divide Two Integers
- LeetCode 29. Divide Two Integers
- Leetcode: Divide Two Integers
- leetcode - 29.Divide Two Integers
- leetcode - Divide Two Integers
- [LeetCode] Divide Two Integers
- LeetCode - Divide Two Integers
- leetcode002-数值处理Reverse Integer,Pow(x,n), atoi, Divide Two Integers
- LeetCode Divide Two Integers
- [Leetcode 87] 29 Divide Two Integers
- [LeetCode]29.Divide Two Integers
- leetcode -- Divide Two Integers