class Solution {
public:
int divide(int dividend, int divisor) {
assert(divisor != 0);
unsigned int divid, divis;
divid = (dividend < 0) ? -dividend : dividend;
divis = (divisor < 0) ? -divisor : divisor;
if (divid < divis)
return 0;
int i;
int ans = 0;
unsigned long long tmp = divis;
for (i = 0; tmp <= divid; i++)
tmp <<= 1;
// save overflow
// unsigned int MAX = 2^32 - 1
if (UINT_MAX >> 1 < tmp) {
ans += (1 << (i-1));
divid -= (divis << (i-1));
i--;
}
for (; divid >= divis && i; i--) {
if ((divis << i) > divid && (divis << (i-1)) <= divid) {
ans += (1 << (i-1));
divid -= (divis << (i-1));
}
}
return ((dividend > 0) ^ (divisor > 0))? -ans : ans;
}
};Leetcode divide two integers
最新推荐文章于 2025-12-21 18:32:56 发布
本文介绍了一种在C++中实现整数除法的方法,通过位移操作来提高效率,并考虑了溢出的情况。该算法适用于32位整数运算。
368

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



