首页 > 解决方案 > 我怎样才能更快地完成这个程序?

问题描述

我正在尝试创建一个程序,其中用户输入两个数字 - 一个基数和一个指数,而指数是一个二进制数。然后打印出最后两位数。我的代码运行良好,但根据执行时间,这不是最快的方法。

这是我的代码:

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)

例如,3and的输出1010应该是49

另一个例子: 输入: 111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111

输出: 31

我希望程序在这样做时工作得更快,我该怎么做?

标签: pythonpython-3.xexecution-time

解决方案


发现以下加速。

发布方法

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

推荐阅读