我有一个程序必须像这样计算许多数字的幂:
条目:
3
2 3 6
因此,程序必须计算:
2**(3**6)
我编写了一个只能计算 3 个数字的幂的程序。但是,如果我尝试计算 4 个或更多数字的幂,程序将输出不正确的值:
nb = int(input())
numbers = list(map(int,input().split()))
lenth = len(numbers)-2
rez = 0
n = 1
for i in range(lenth):
rez += numbers[n]**numbers[n+1]
n+=1
tot = numbers[0] ** rez
print(tot)
请您参考如下方法:
您可以使用 functools.reduce 和内置函数 pow(如果您使用的是 python 2,reduce 也是一个内置函数)
>>> from functools import reduce
>>> reduce(pow, [2, 3, 6])
262144
编辑:
正如评论中指出的,这实际上会计算 ((((a**b)**c)**d)**e)。要获得 a**(b**(c**(d**e)))) 的结果,您仍然可以使用 reduce,但您必须反转输入参数列表和创建一个翻转的 pow 函数:lambda a, b: b**a
>>> reduce(lambda a, b: b**a, reversed([2, 3, 6]))
作为函数:
def super_pow(*args):
return reduce(lambda a, b: b**a, reversed(args))
请注意,这很容易产生无法计算或无法容纳在系统内存中的大量数字,从而导致您的计算机死机。
