
Problem Statement
Given two integers dividend
and divisor
, divide two integers without using multiplication, division, and mod operator.
The integer division should truncate toward zero, which means losing its fractional part. For example, 8.345
would be truncated to 8
, and -2.7335
would be truncated to -2
.
We at gradjobopenings.com provide free job alerts of freshers job drives. In this website we list on campus job openings for freshers and off campus job openings for freshers and also work from home job openings. This is the best website to apply for off campus drive in India. Visit our website for government job alerts and private job alerts. We also list free interview notes and study materials, one of the best interview study website.comfortable to face the interviews:
Return the quotient after dividing dividend
by divisor
.
Note: Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: [−231, 231 − 1]
. For this problem, if the quotient is strictly greater than 231 - 1
, then return 231 - 1
, and if the quotient is strictly less than -231
, then return -231
.
Example 1:
Input: dividend = 10, divisor = 3 Output: 3 Explanation: 10/3 = 3.33333.. which is truncated to 3.
Example 2:
Input: dividend = 7, divisor = -3 Output: -2 Explanation: 7/-3 = -2.33333.. which is truncated to -2.
Constraints:
-231 <= dividend, divisor <= 231 - 1
divisor != 0
- Time: O(\log^2 n)O(log2n)
- Space: O(1)O(1)
DIVIDE TWO INTEGERS Program Solution in C++
class Solution {
public:
int divide(int dividend, int divisor) {
// -2^{31} / -1 = 2^31 -> overflow so return 2^31 - 1
if (dividend == INT_MIN && divisor == -1)
return INT_MAX;
const int sign = dividend > 0 ^ divisor > 0 ? -1 : 1;
long ans = 0;
long dvd = labs(dividend);
long dvs = labs(divisor);
while (dvd >= dvs) {
long k = 1;
while (k * 2 * dvs <= dvd)
k *= 2;
dvd -= k * dvs;
ans += k;
}
return sign * ans;
}
};
DIVIDE TWO INTEGERS Program Solution in JAVA
class Solution {
public int divide(long dividend, long divisor) {
// -2^{31} / -1 = 2^31 -> overflow so return 2^31 - 1
if (dividend == Integer.MIN_VALUE && divisor == -1)
return Integer.MAX_VALUE;
final int sign = dividend > 0 ^ divisor > 0 ? -1 : 1;
long ans = 0;
long dvd = Math.abs(dividend);
long dvs = Math.abs(divisor);
while (dvd >= dvs) {
long k = 1;
while (k * 2 * dvs <= dvd)
k *= 2;
dvd -= k * dvs;
ans += k;
}
return sign * (int) ans;
}
}
DIVIDE TWO INTEGERS Program Solution in Python
class Solution:
def divide(self, dividend: int, divisor: int) -> int:
if dividend == -2**31 and divisor == -1:
return 2**31 - 1
sign = -1 if (dividend > 0) ^ (divisor > 0) else 1
ans = 0
dvd = abs(dividend)
dvs = abs(divisor)
while dvd >= dvs:
k = 1
while k * 2 * dvs <= dvd:
k <<= 1
dvd -= k * dvs
ans += k
return sign * ans