问题描述:
要求不使用乘法、除法和mod运算符,实现两个整数相除,如果溢出,返回2147483647
问题示例:
输入100和9,输出11
代码实现:
解题思路:
divdend = divisor * re,而任何一个整数都可以用二进制和来表示。
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