题目

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]要存的数超了。