Skip to content

Commit c03c308

Browse files
committed
3
1 parent 1aac8c0 commit c03c308

File tree

1 file changed

+21
-32
lines changed

1 file changed

+21
-32
lines changed

Diff for: DivideTwoIntegers/DivideTwoIntegers.cpp

+21-32
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,31 @@
11
class Solution {
22
public:
33
int divide(int dividend, int divisor) {
4-
// Start typing your C/C++ solution below
5-
// DO NOT write int main() function
6-
7-
bool signed_flag = false;
8-
unsigned unsigned_dividend, unsigned_divisor;
9-
10-
if (dividend < 0) {
11-
unsigned_dividend = -dividend;
12-
signed_flag ^= true;
4+
long long int divid = dividend;
5+
long long int divis = divisor;
6+
bool neg = false;
7+
if (divid < 0) {
8+
neg = neg ? false : true;
9+
divid = -divid;
1310
}
14-
else
15-
unsigned_dividend = dividend;
16-
17-
if (divisor < 0) {
18-
unsigned_divisor = -divisor;
19-
signed_flag ^= true;
11+
if (divis < 0) {
12+
neg = neg ? false : true;
13+
divis = -divis;
2014
}
21-
else
22-
unsigned_divisor = divisor;
23-
24-
unsigned result = unsignedDivide(unsigned_dividend, unsigned_divisor);
25-
return signed_flag ? -result : result;
26-
}
27-
28-
unsigned unsignedDivide(unsigned dividend, unsigned divisor) {
29-
unsigned result = 0;
30-
while (dividend >= divisor) {
31-
unsigned num = divisor;
32-
unsigned shift = 0;
33-
while (((unsigned long long)num << 1) <= dividend) {
34-
num <<= 1;
15+
long long int result = 0;
16+
while (divid >= divis) {
17+
long long int x = divis;
18+
int shift = 0;
19+
while ((x << 1) <= divid) {
20+
x <<= 1;
3521
shift += 1;
3622
}
37-
dividend -= num;
38-
result |= 1 << shift;
23+
result += 1 << shift;
24+
divid -= x;
25+
}
26+
if (neg) {
27+
result = -result;
3928
}
4029
return result;
4130
}
42-
};
31+
};

0 commit comments

Comments
 (0)