给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’ 。
注意:
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1
示例 1:
输入:a = 15, b = 2
输出:7
解释:15/2 = truncate(7.5) = 7
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/xoh6Oh
class Solution(object):
def divide(self, a, b):
"""
:type a: int
:type b: int
:rtype: int
"""
result = 0
flag = True
if a == 0:
return 0
if a == b:
return 1
if (a > 0 and b < 0) or (a < 0 and b > 0):
flag = False
a = abs(a)
b = abs(b)
while a >= b:
c = b
temp = 1
while a >= c+c:
c += c
temp += temp
a -= c
result += temp
result = result if flag else -result
return min(result, 2**31-1)