给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1: 输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333..) = truncate(3) = 3 示例 2: 输入: dividend = 7, divisor = -3 输出: -2 解释: 7/-3 = truncate(-2.33333..) = -2 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/divide-two-integers 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题解
class Solution: def divide(self, dividend, divisor): sig = True if dividend*divisor > 0 else False # 判断二者相除是正or负 dividend, divisor= abs(dividend), abs(divisor) # 将被除数和除数都变成正数 res = 0 # 用来表示减去了多少个除数,也就是商为多少 while divisor <= dividend: # 当被除数小于除数的时候终止循环 tmp_divisor, count = divisor, 1 # 倍增除数初始化 while tmp_divisor <= dividend: # 当倍增后的除数大于被除数重新,变成最开始的除数 dividend -= tmp_divisor res += count count <<= 1 # 向左移动一位 tmp_divisor <<= 1 # 更新除数(将除数扩大两倍) res_value = res if sig == True else -res # 给结果加上符号 return max(min(res_value, 2**31-1), -2**31) 作者:h_n 链接:https://leetcode-cn.com/problems/divide-two-integers/solution/chu-fa-dao-jian-fa-de-zhuan-hua-by-h_n/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。