File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ * Divide two integers without using multiplication, division and mod operator.
3
+
4
+ * If it is overflow, return MAX_INT.
5
+ * Created by supercoderx on 2017/8/11.
6
+ */
7
+ #include
8
+ #include
9
+
10
+ int divide (int dividend , int divisor ) {
11
+ if (divisor == 0 || (dividend == INT_MIN ) && (divisor == -1 )) {
12
+ return INT_MAX ;
13
+ }
14
+ if (dividend == INT_MIN && divisor == 1 )
15
+ return INT_MIN ;
16
+ int neg = 0 ;
17
+ if ((dividend > 0 ) ^ (divisor > 0 )) {
18
+ neg = 1 ;
19
+ }
20
+ long long dvd = dividend , dvs = divisor ;
21
+ if (dividend < 0 ) {
22
+ dvd = - dvd ;
23
+ }
24
+ if (divisor < 0 ) {
25
+ dvs = - dvs ;
26
+ }
27
+
28
+
29
+ int res = 0 ;
30
+ while (dvd >= dvs ) {
31
+ long long temp = dvs , scala = 1 ;
32
+ while (dvd >= (temp << 1 )) {
33
+ temp <<= 1 ;
34
+ scala <<= 1 ;
35
+ }
36
+ dvd -= temp ;
37
+ res += scala ;
38
+ }
39
+ return neg == 1 ? - res : res ;
40
+ }
41
+
42
+ void testDivide () {
43
+ printf ("%d" , divide (-2147483648 , 2 ));
44
+ }
You can’t perform that action at this time.
0 commit comments