Python求解未知整数k:CodeWars数字幂和匹配问题求助
解决方案
我们可以把问题拆解为三个核心步骤:提取数字的各位、计算连续幂次的总和、判断总和是否能被原数整除。以下是具体实现思路和代码:
代码实现
def dig_pow(n, p): # 将正整数n转为字符串,方便逐个提取各位数字 digits = str(n) total = 0 # 遍历每个数字,计算对应幂次并累加 for index, digit_char in enumerate(digits): digit = int(digit_char) # 第一个数字幂次为p,后续依次加1,用p + index实现偏移 total += digit ** (p + index) # 判断总和是否能被n整除,返回对应结果 return total // n if total % n == 0 else -1
代码解释
- 提取各位数字:把
n转为字符串后,可直接遍历每个字符,再转回整数得到单独的各位数字。 - 计算幂次和:用
enumerate遍历字符串时,index从0开始,刚好对应每个数字需要增加的幂次偏移量——第一个数字用p+0,第二个用p+1,以此类推,完成连续幂次的计算并累加。 - 判断返回结果:如果幂次总和能被
n整除,返回商(即题目要求的k);否则返回-1。
示例验证
- 输入
dig_pow(89, 1):计算8^1 + 9^2 = 8 + 81 = 89,89 % 89 = 0,返回89 // 89 = 1,符合要求。 - 输入
dig_pow(695, 2):计算6^2 + 9^3 + 5^4 = 36 + 729 + 625 = 1390,1390 % 695 = 0,返回1390 // 695 = 2,符合要求。 - 输入
dig_pow(46288, 3):计算总和为2360688,2360688 // 46288 = 51,符合要求。
内容的提问来源于stack exchange,提问作者Jamiu Amure
相关产品推荐
相关产品推荐

