问题描述:
要求不使用乘法、除法和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=divisor∗re=divisor∗(Kn∗2n+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