Codewars第十四天–Numbers that are a power of their sum of digits
题目描述:
数字81有一个特殊的属性,其数字之和的某个幂等于81(九的平方)。 八十一(81),是拥有这个属性的第一个数字(不考虑一位数字)。 下一个是512.让我们看两个案例的细节
8+1=98+1=9且 92=8192=81
512=5+1+2=8512=5+1+2=8 且 83=51283=512
我们需要创建一个函数power_sumDigTerm()
,它接收一个数字n并可以输出这个数字序列的第n
项。 我们上面提到的例子意味着:
power_sumDigTerm(1)== 81
power_sumDigTerm(2)== 512
代码如下:
这道题目的主要思路是创建一个新的数组,将所有可能的数字加入到数组中。
我们的首要目标就是要找出这些数字。这里需要巧妙的使用map()
函数:
n=81
a=sum(map(int, str(n)))
首先将输入的数字转换成字符串,对字符串中的每一个字符,也就是每一位数字用map
映射为int
格式,然后对他们求和。
通过这个map
映射判断,就可以找出所有符合条件的数字了。
def power_sumDigTerm(n):
#your code here
power_sum = []
for i in range(2, 100):
for j in range(2, 50):
pow_i = i ** j
if sum(map(int, str(pow_i))) == i:
power_sum.append(pow_i)
power_sum.sort()
return power_sum[n-1]