题目
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: [$−23^1$, $23^1$]. For this problem, assume that your function returns $23^1$ − 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:
- $−23^1$ <=
dividend, divisor
<= $23^1$ - 1 divisor != 0
解析
题目假设机器只能存32位的整数, 所以不能用long
, edge case只好用if处理掉.
直观思路就是在N(numerator, dividend)的绝对值大于0时, 减去尽可能多个的D(denominator, divisor)的绝对值. 并记录减了多少个. 此方法在N非常大或(且)D非常小时会很慢.
虽然不让用乘除操作但是可以用左右位移替代, 每次尝试减去尽可能多个的D.
代码
c++
1 | class Solution { |