给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/divide-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
错解:超时了。。。
class Solution: def divide(self, dividend: int, divisor: int) -> int: cnt=0 n=1 if dividend >0 and divisor>0: n=1 elif dividend >0 and divisor<0: n=-1 elif dividend <0 and divisor<0: n=1 elif dividend <0 and divisor>0: n=-1 if -2147483648 < n < 2147483647: while abs(dividend)>=abs(divisor): dividend=abs(dividend)-abs(divisor) cnt+=1 return cnt*n
正解
位运算不是很明白
class Solution: def divide(self, dividend: int, divisor: int) -> int: sign = (dividend > 0)^(divisor>0)#如果两个条件不同时满足,那就是1,即true dividend,divisor = abs(dividend),abs(divisor) n = 0 while divisor <= dividend: divisor = divisor << 1 n+=1 res = 0 while n>0: divisor = divisor>>1 n-=1 if dividend>=divisor: res += 1<<n dividend -= divisor if sign: res = -res m = 1<<31 if res > m -1: return m -1 elif res <-m: return -m else: return res