您的位置:首页 > 其它

leetcode: Divide Two Integers

2014-06-17 20:59 330 查看
将因子不断乘以2(可以通过移位实现,同时结果也从1开始不断移位加倍),然后和被除数比较,等到大于被除数一半了,就从被除数中减去,将因子个数叠加入结果中。然后在剩下的被除数中采用同样的方法减去小于其一半的因子和,循环往复

必须要unsigned int

class Solution {
public:
int divide(int dividend, int divisor) {
assert( divisor != 0);
int res = 0;
bool neg = (( dividend ^ divisor) >> ( sizeof(int) * 8 - 1)) ? false : true;
unsigned tdividend = abs(dividend);
unsigned tdivisor = abs(divisor);
while( tdividend > tdivisor){
int factor = 1;
unsigned tmp = tdivisor;
while( (tmp<<= 1) < tdividend){
factor <<= 1;
}
tdividend -= ( tmp >>= 1);
res += factor;
}
if( tdividend == tdivisor)
++res;
return neg ? res : -res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: