--- title: 29.Divide Two Integers tags: Leetcode,2021 --- # 【LeetCode】29. Divide Two Integers ## Description >Given two integers dividend and divisor, divide two integers without using multiplication, division, and mod operator. >Return the quotient after dividing dividend by divisor. >The integer division should truncate toward zero, which means losing its fractional part. For example, truncate(8.345) = 8 and truncate(-2.7335) = -2. >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, assume that your function returns 231 − 1 when the division result overflows. ## Example 1: ``` Input: dividend = 10, divisor = 3 Output: 3 Explanation: 10/3 = truncate(3.33333..) = 3. ``` ## Example 2: ``` Input: dividend = 7, divisor = -3 Output: -2 Explanation: 7/-3 = truncate(-2.33333..) = -2. ``` ## Example 3: ``` Input: dividend = 0, divisor = 1 Output: 0 ``` ## Example 4: ``` Input: dividend = 1, divisor = 1 Output: 1 ``` ## Constraints: ``` -231 <= dividend, divisor <= 231 - 1 divisor != 0 ``` ## Code ``` public class Solution { public int Divide(int dividend, int divisor) { if (divisor == 0) return int.MaxValue; int sign = dividend > 0 ^ divisor > 0 ? -1 : 1; long m = Math.Abs((long)dividend), n = Math.Abs((long)divisor), count = 0; for (m -= n; m >= 0; m -= n){ count++; if (m == 0) break; for (int subCount = 1; m - (n << subCount) >= 0; subCount++){ m -= n << subCount; count += (int)Math.Pow(2, subCount); } } return count*sign > int.MaxValue ? int.MaxValue : (int)count*sign; } } ```