LCR001.两数相除

剑指offer(专项突破版)1.1 整数的基础知识

题目链接:LCR001-两数相除

书上的讲解很清晰,不过好像漏掉了a=-2147483648 b=1的情况。不知道还有没有其他方法进一步优化,留作以后更新。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public:
int divide(int a, int b) {
//判断边界
if(a == 0x80000000 && b == -1)
return INT_MAX;
if(b == 1)
return a;
//判断结果符号、都变成负数
int flag = 2;
if(a > 0){
flag--;
a = -a;
}
if(b > 0){
flag--;
b = -b;
}
//两层循环
int res = 0;
while(a <= b){
//暂存除数
int divisor = b;
int quotient = 1;
while(divisor >= 0xc0000000 && a <= divisor + divisor){
quotient += quotient;
divisor += divisor;
}
//此时被除数刚刚大于除数
res += quotient;
a -= divisor;
}
//判断结果符号
return flag==1 ? -res : res;

}
};

LCR001.两数相除
http://example.com/2023/12/05/posts/LCR001-两数相除/
作者
Xuan Yang
发布于
2023年12月5日
许可协议