Python每日一练算法之两整数相除(不使用乘法、除法和mod运算)

问题描述:

要求不使用乘法、除法和mod运算符,实现两个整数相除,如果溢出,返回2147483647

问题示例:

输入100和9,输出11

代码实现:

解题思路:

divdend = divisor * re,而任何一个整数都可以用二进制和来表示。
d i v d e n d = d i v i s o r r e = d i v i s o r ( K n 2 n + K ( n 1 ) 2 ( n 1 ) + . . . . + K 1 2 + K 0 1 ) , ( K n K ( n 1 ) . . . . K 0 ) 0 1 divdend = divisor *re = divisor *(Kn*2^n+K(n-1)*2^(n-1)+....+K1*2+K0*1),其中(Kn、K(n-1)....K0)等于0或1

import math

class Dividend(object):
   
   def divide(self,dividend,divisor):
      MAX = 2147483647
      if divisor == 0:
         return MAX
      symbol = dividend > 0 and divisor <  0 or dividend < 0 and divisor > 0 #and优先or
      a,b = abs(dividend),abs(divisor)
      ans,shift = 0,31
      while shift >=0:
         if a >= b<<shift:  #注意运算符优先级 << 大于 >=
            a  -= b<<shift
            ans +=1<<shift
         shift -=1
      if symbol:
         ans = -ans
      if ans > MAX:
         return MAX
      return ans

if __name__ =='__main__':
   slo = Dividend()
   a = int(input("输入被除数:"))
   b = int(input("输入除数:"))
   res = slo.divide(a,b)
   print(res)

结果输出:

输入被除数:100
输入除数:9
11

猜你喜欢

转载自blog.csdn.net/qq_42642142/article/details/106020187