【发布时间】:2017-07-22 22:28:32
【问题描述】:
你能解释一下这里有什么问题吗?在我看来,这段代码就像一堆废话,但有正确的解决方案。请原谅我的英语。 这个kata的任务:
有些数字具有有趣的特性。例如:
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
给定一个正整数 n,写成 abcd...(a, b, c, d... 是数字)和一个正整数 p,我们想找到一个正整数 k,如果它存在的话,比如总和n 的位数取 p 的连续幂等于 k n。换句话说:
Is there an integer k such as : (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + ...) = n * k
如果是则返回k,否则返回-1。
注意:n、p 将始终作为严格的正整数给出。
dig_pow(89, 1) 应该返回 1,因为 8¹ + 9² = 89 = 89 * 1
dig_pow(92, 1) 应该返回 -1,因为没有 k,例如 9¹ + 2² 等于 92 * k
dig_pow(695, 2) 应该返回 2,因为 6² + 9³ + 5⁴= 1390 = 695 * 2
dig_pow(46288, 3) 应该返回 51,因为 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
def dig_pow(n, p):
if n > 0 and p > 0:
b = []
a = str(n)
result = []
for i in a:
b.append(int(i))
for x in b:
if p != 1:
result.append(x ** p)
p += 1
else:
result.append(x ** (p + 1))
if int((sum(result)) / n) < 1:
return -1
elif int((sum(result)) / n) < 2:
return 1
else:
return int((sum(result)) / n)
测试结果:
测试通过
测试通过
测试通过
测试通过
3263 应该等于 -1
【问题讨论】:
标签: python algorithm python-2.7 python-3.x digit