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 divdend=divisorre=divisor(Kn2n+K(n1)2(n1)+....+K12+K01),(KnK(n1)....K0)01

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
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值