python - 我怎样才能更快地完成这个程序?
问题描述
我正在尝试创建一个程序,其中用户输入两个数字 - 一个基数和一个指数,而指数是一个二进制数。然后打印出最后两位数。我的代码运行良好,但根据执行时间,这不是最快的方法。
这是我的代码:
base = int(input())
exponent = int(input())
def binaryToDec(binary):
decimal, i = 0, 0
while(binary != 0):
dec = binary % 10
decimal = decimal + dec * pow(2, i)
binary = binary//10
i += 1
return decimal
exponent = binaryToDec(exponent)
result = base ** exponent
result = abs(result)%100
print(result)
例如,3
and的输出1010
应该是49
。
另一个例子: 输入:
111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111
输出:
31
我希望程序在这样做时工作得更快,我该怎么做?
解决方案
发现以下加速。
发布方法
def binaryToDec(binary):
decimal, i = 0, 0
while(binary != 0):
dec = binary % 10
decimal = decimal + dec * pow(2, i)
binary = binary//10
i += 1
return decimal
修改方法(替代使用 pow(2, i))
def binaryToDec_modified(binary):
decimal, i, p = 0, 0, 1 # modification
while(binary != 0):
dec = binary % 10
binary = binary//10
decimal = decimal + dec * p # modification
p <<= 1
i += 1
return decimal
*计时(约快 73%)*
n = 100010001101001 # (15 digits)
%timeit binaryToDec(n)
100000 loops, best of 3: 15.6 µs per loop
%timeit binaryToDec_modified(n)
100000 loops, best of 3: 9.03 µs per loop