LeetCode-Divide Two Integers-快速除法
2014-10-03 17:41
435 查看
https://oj.leetcode.com/problems/divide-two-integers/
不使用乘除实现除法。
那么能够使用的就是+-和移位运算。首先检查边界和符号。如果用一直减的方法实现,会有可能除数很小导致超时。
所以必须借助移位运算减少减法操作数目。
我的想法是,首先通过被除数右移计算出一个除数需要左移的最大位数。然后从最大的右移位数一直减小到右移0,每次都将a减少到无法减少,并将结果+=2^k即可。
不使用乘除实现除法。
那么能够使用的就是+-和移位运算。首先检查边界和符号。如果用一直减的方法实现,会有可能除数很小导致超时。
所以必须借助移位运算减少减法操作数目。
我的想法是,首先通过被除数右移计算出一个除数需要左移的最大位数。然后从最大的右移位数一直减小到右移0,每次都将a减少到无法减少,并将结果+=2^k即可。
class Solution { public: int divide(int dividend, int divisor) { long long int a=dividend; long long int b=divisor; int flag=1; if (a==0){return 0;} if (b==0){return 0;} if (a<0){flag=!flag;a=-a;} if (b<0){flag=!flag;b=-b;} if (a<b){return 0;} long long int d=a; int k=0; while (d>b){ d=d>>1; k++; } k=max(0,k-1); int c=0; for (int i=k;i>=0;i--){ d=b<<i; while(a>=d){ a-=d; c+=1<<i; } } if (!flag){c=-c;} return c; } };
相关文章推荐
- LeetCode 29 Divide Two Integers 除法的原理
- LeetCode 29. Divide Two Integers(整数除法)
- [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers
- LeetCode 29. Divide Two Integers(除法)
- leetcode 29. Divide Two Integers 做除法
- 【Leetcode】 - Divide Two Integers 位运算实现整数除法
- LeetCode 29 Divide Two Integers (不使用乘法,除法,求模计算两个数的除法)
- leetcode——Divide Two Integers 不用乘除取余操作求除法(AC)
- LeetCode 29 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] Add Two Numbers、Divide Two Integers、Multiply Strings、Add Binary、Plus One
- Leetcode: Divide Two Integers
- leetcode--Divide two integers
- leetcode - Divide Two Integers