题目
215=32768 and the sum of its digits is 3+2+7+6+8=26.
What is the sum of the digits of the number 21000?
解答
这道就是一行代码直出的,思路也简单,就是我们算了2个多少次方之后,把数字拆解成单个数字的向量,然后加和起来,就可以了。
sum([int(x) for x in str(2**1000)])
除了通过字符串,要拆解数字,还可以不断地对10求模,拿到最后一个数字,然后不断地整除10,一次次把最后一个数字扔掉。这也是解法之一。
x = 2**1000
res = 0
while x > 0:
res += x % 10
x //= 10
print(res)
这道题过于简单,如果把1000次方改成更大,让数字超出int64的范围,那这道题的难度就会增加一些。

假设是前面说的难度增加的场景,不知道你是否还记得大明湖畔的夏雨荷(第13道题的大数加和,电梯:PE13: Large Sum)?
因为幂运算其实就是乘法运算,而乘法运算就是加法运算。所以我们用第13道题的加和函数来算一下。
import numpy as np
from problem13 import myadd
x = np.zeros(500, dtype='int32')
x[-1] = 2
N = 1000
for i in range(N-1):
x = myadd(x, x)
x.sum()

这里因为结果不会超过500位数,所以直接sum()就可以了。如果你预设的位数不够,那也是没有问题的,单独处理一下x[0]就行。除非x[0]要存的数超了。