您的位置:首页 > 其它

LeetCode-Divide Two Integers-快速除法

2014-10-03 17:41 435 查看
https://oj.leetcode.com/problems/divide-two-integers/

不使用乘除实现除法。

那么能够使用的就是+-和移位运算。首先检查边界和符号。如果用一直减的方法实现,会有可能除数很小导致超时。

所以必须借助移位运算减少减法操作数目。

我的想法是,首先通过被除数右移计算出一个除数需要左移的最大位数。然后从最大的右移位数一直减小到右移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;
}
};


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: