File tree 1 file changed +21
-32
lines changed
1 file changed +21
-32
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public:
3
3
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;
13
10
}
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;
20
14
}
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 ;
35
21
shift += 1 ;
36
22
}
37
- dividend -= num;
38
- result |= 1 << shift;
23
+ result += 1 << shift;
24
+ divid -= x;
25
+ }
26
+ if (neg) {
27
+ result = -result;
39
28
}
40
29
return result;
41
30
}
42
- };
31
+ };
You can’t perform that action at this time.
0 commit comments