6
6
*
7
7
* Divide two integers without using multiplication, division and mod operator.
8
8
*
9
- *
9
+ * If it is overflow, return MAX_INT.
10
+ *
10
11
**********************************************************************************/
11
12
12
13
#include < stdio.h>
13
14
#include < string.h>
14
15
#include < iostream>
15
16
using namespace std ;
16
17
18
+ #define INT_MAX 2147483647
19
+ #define INT_MIN (-INT_MAX - 1 )
17
20
18
21
int divide (int dividend, int divisor) {
19
-
20
- int sign = 1 ;
21
- long long dvd = dividend;
22
- long long dvs = divisor;
23
- if (dvd<0 ) {
24
- dvd = -dvd;
25
- sign = -sign;
26
- }
27
- if (dvs<0 ) {
28
- dvs = -dvs;
29
- sign = -sign;
30
- }
31
22
32
- long long bit_num[32 ];
33
- memset ( bit_num, 0 , sizeof (bit_num) );
23
+ int sign = (float )dividend / divisor > 0 ? 1 : -1 ;
24
+ unsigned int dvd = dividend > 0 ? dividend : -dividend;
25
+ unsigned int dvs = divisor > 0 ? divisor : -divisor;
34
26
35
- int i=0 ;
27
+ unsigned int bit_num[32 ];
28
+ unsigned int i=0 ;
36
29
long long d = dvs;
37
30
bit_num[i] = d;
38
31
while ( d <= dvd ){
@@ -50,18 +43,24 @@ int divide(int dividend, int divisor) {
50
43
}
51
44
}
52
45
53
- return result * sign;
46
+ // becasue need to return `int`, so we need to check it is overflowed or not.
47
+ if ( result > INT_MAX && sign > 0 ) {
48
+ return INT_MAX;
49
+ }
50
+ return (int )result * sign;
54
51
}
55
52
56
53
57
54
int main ()
58
55
{
56
+ cout << " 0/2=" << divide (0 , 2 ) << endl;
59
57
cout << " 10/2=" << divide (10 , 2 ) << endl;
60
58
cout << " 10/3=" << divide (10 , 3 ) << endl;
61
59
cout << " 10/5=" << divide (10 , 5 ) << endl;
62
60
cout << " 10/7=" << divide (10 , 7 ) << endl;
63
61
cout << " 10/10=" << divide (10 , 10 ) << endl;
64
62
cout << " 10/11=" << divide (10 , 11 ) << endl;
63
+ cout << " -1/1=" << divide (1 , -1 ) << endl;
65
64
cout << " 1/-1=" << divide (1 , -1 ) << endl;
66
65
cout << " -1/-1=" << divide (-1 , -1 ) << endl;
67
66
cout << " 2147483647/1=" << divide (2147483647 , 1 ) << endl;
@@ -71,4 +70,5 @@ int main()
71
70
cout << " 2147483647/2=" << divide (2147483647 , 2 ) << endl;
72
71
cout << " 2147483647/10=" << divide (2147483647 , 10 ) << endl;
73
72
cout << " -2147483648/1=" << divide (-2147483648 , 1 ) << endl;
73
+ cout << " -2147483648/-1=" << divide (-2147483648 , -1 ) << endl;
74
74
}
0 commit comments