返回

PTA7-2 数字之王:从数字到数字之和

闲谈

踏上数字之王的征途

数字之王,一个看似简单却奥妙无穷的问题。它不仅考验你的编程能力,更考验你的逻辑思维和数学思维。

1. 理解题意,把握核心

题目要求我们对一个给定的正整数区间 [N1, N2] 中的每个数字进行一系列操作,直到最终数字不再变化。具体操作步骤如下:

  1. 将数字的各位数的立方相乘。
  2. 将结果的各位数求和。
  3. 重复步骤 1 和步骤 2,直到最终数字不再变化。

2. 算法设计,突破难题

为了解决数字之王的挑战,我们需要设计一个算法,按照题目要求一步一步地进行操作。以下是一个可能的算法步骤:

  1. 初始化一个变量 sum 为 0,用于存储数字的各位数立方相乘之和。
  2. 对于给定的正整数区间 [N1, N2] 中的每个数字 n,执行以下步骤:
    • 将 n 的各位数分别取出来,并分别计算它们的立方。
    • 将这些立方数相乘,并将结果存入变量 sum 中。
    • 将 sum 的各位数分别取出来,并分别计算它们的和。
    • 将这个和存入变量 sum 中。
    • 重复以上步骤,直到 sum 不再变化。
  3. 输出最终的 sum。

3. 代码实现,展示风采

def sum_of_digits_cubed(n):
    """
    计算数字 n 的各位数立方之和。

    参数:
    n: 一个正整数。

    返回值:
    n 的各位数立方之和。
    """
    sum = 0
    while n > 0:
        digit = n % 10
        sum += digit ** 3
        n //= 10
    return sum


def digital_king(n1, n2):
    """
    计算数字区间 [n1, n2] 中每个数字的数字之王。

    参数:
    n1: 数字区间的左端点。
    n2: 数字区间的右端点。

    返回值:
    数字区间 [n1, n2] 中每个数字的数字之王。
    """
    result = []
    for n in range(n1, n2 + 1):
        sum = n
        while sum > 9:
            sum = sum_of_digits_cubed(sum)
        result.append(sum)
    return result


if __name__ == "__main__":
    n1 = int(input("输入数字区间的左端点:"))
    n2 = int(input("输入数字区间的右端点:"))
    result = digital_king(n1, n2)
    print("数字区间 [{}