Skip to content

Commit e0876a9

Browse files
committed
integer
1 parent f764064 commit e0876a9

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

29-Divide-Two-Integers.cpp

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* 可以用移位运算来代替乘法,
3+
* 分清条件dd >= dr和dd > dr,int除以int时-2147483647 / -1会溢出,
4+
* C++11中的abs有int、long int和long long三种不同参数,
5+
* 如果这里在使用abs时没有强制类型转换的话,会使用int型的abs,这样-2147483648就会溢出
6+
*/
7+
class Solution {
8+
public:
9+
int divide(int dividend, int divisor) {
10+
if(divisor == 0){
11+
return 0;
12+
}
13+
if(dividend == -2147483648 && divisor == -1){
14+
return 2147483647;
15+
}
16+
int flag;
17+
if((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)){
18+
flag = 0;
19+
}
20+
else{
21+
flag = 1;
22+
}
23+
long long dd = abs((long long)dividend), dr = abs((long long)divisor), i = 1, res = 0;
24+
while(dd >= dr){
25+
dr <<= 1;
26+
i <<= 1;
27+
}
28+
dr >>= 1;
29+
i >>= 1;
30+
while(i > 0){
31+
if(dd >= dr){
32+
dd -= dr;
33+
res += i;
34+
}
35+
dr >>= 1;
36+
i >>= 1;
37+
}
38+
if(flag == 1){
39+
return -res;
40+
}
41+
return res;
42+
}
43+
};
44+

0 commit comments

Comments
 (0)