不用乘除余计算两个数的商。
基本都能想到左移吧,关键是实现起来多精炼。
在leetcode上看到的:
int divide(int dividend, int divisor) {
bool signA = dividend >= 0, signB = divisor > 0;
unsigned num = abs(dividend), div = abs(divisor), res = 0, curr = 0;
// using Long division
for (int idx = 31; idx >= 0; idx--) {
curr <<= 1;
curr |= ((num >> idx) & 1);
res = res << 1;
if (curr >= div) {
curr -= div;
res |= 1;
}
}
if (signA ^ signB)
return -(int)res;
return (int)res;
}
本文介绍了一种不使用乘法、除法和取余运算来计算两整数相除的商的方法。通过位操作实现了长除法的过程,并提供了一个具体的C语言实现示例。
672

被折叠的 条评论
为什么被折叠?



