完美整数 | 豆包MarsCode AI刷题

41 阅读2分钟

这段代码的目的是解决一个关于“完美整数”的问题。完美整数被定义为所有数字都是相同的整数,例如:1, 2, 11, 22, 333等。我们将在下面逐步分析这个代码实现,并给出更详细的题解。

题目分析

问题要求: 给定一个整数区间 [x, y],计算这个区间内完美整数的数量。

完美整数的定义

  • 一个整数是完美的,当其每位数字均相同。例如:1, 2, 11, 222,等。

代码解析

1. is_perfect_integer(n) 函数

这个函数接受一个整数 n 作为输入,判断它是否是一个完美整数:

  • 将整数转换为字符串,以便逐位检查每个字符。
  • 使用 all() 函数来检查所有字符是否都与第一个字符相同,若相同返回 True,否则返回 False

示例

  • 如果输入为 22,函数会返回 True
  • 如果输入为 23,函数会返回 False

2. solution(x, y) 函数

该函数用于统计在区间 [x, y] 内的完美整数数量:

  • 初始化一个计数器 count 为0。
  • 遍历区间内的每个整数 num
  • 对于每个 num,使用 is_perfect_integer() 函数检查它是否是完美整数,如果是,计数器加1。
  • 返回计数器的值,即完美整数的数量。

示例

  • 对于区间 [1, 10],完美整数有 {1, 2, 3, 4, 5, 6, 7, 8, 9},数量为9。
  • 对于区间 [2, 22],完美整数有 {2, 11, 22},数量为10。

主程序

主程序部分通过两个测试用例来检查 solution 函数的正确性:

  • print(solution(1, 10) == 9) 期望输出为 True
  • print(solution(2, 22) == 10) 期望输出为 True

运行和测试

直接运行这个程序将会验证 solution 函数的输出是否符合预期。

代码优化(如果需要)

尽管当前解决方案已经能正常工作,但在处理范围较大时,效率可能会有所影响。可以考虑更高效的算法来预先生成完美整数或直接计算。

完整代码

以下是最终的代码实现:

def is_perfect_integer(n):
    # 将数字转换为字符串
    s = str(n)
    # 检查所有字符是否相同
    return all(digit == s[0] for digit in s)
 
def solution(x, y):
    count = 0
    # 在区间 [x, y] 中循环
    for num in range(x, y + 1):
        if is_perfect_integer(num):
            count += 1
    return count
 
if __name__ == "__main__":
    print(solution(1, 10) == 9)  # 输出: True
    print(solution(2, 22) == 10)  # 输出: True

这个代码清晰地实现了完美整数的判断和统计功能。