diff options
Diffstat (limited to 'divide_2_int.cpp')
-rw-r--r-- | divide_2_int.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/divide_2_int.cpp b/divide_2_int.cpp new file mode 100644 index 0000000..7c172f7 --- /dev/null +++ b/divide_2_int.cpp @@ -0,0 +1,32 @@ +#include <bits/stdc++.h> + +class Solution { +public: + int divide(int dividend, int divisor) { + if (dividend == divisor) { + if (divisor == -1) + return INT_MAX; + else if (divisor == INT_MIN) + return 1; + else if (divisor < 0) + return 1 + divide(dividend - divisor, divisor); + else + return -1 + divide(dividend + divisor, divisor); + } else if (divisor == INT_MIN) + return 0; + bool negative = (dividend < 0) ^ (divisor < 0); + dividend = abs(dividend); + divisor = abs(divisor); + int result = 0; + for (int i = 31; i >= 0; --i) { + int shiftedDiv = (dividend >> i); + if (shiftedDiv >= divisor) { + result += (1 << i); + dividend -= (divisor << i); + } + } + return (negative ? -result : result); + } +}; + +int main() {} |