📜  循环数(1)

📅  最后修改于: 2023-12-03 14:54:15.727000             🧑  作者: Mango

循环数

循环数是在数字环上进行数字操作的数,例如将每个数字的各位数字的平方相加,并在操作一定次数后观察其是否在之前已出现过。

循环数在程序员的日常工作和编写算法时经常被用到,例如快速排序和数组旋转等算法都需要使用循环数。

循环数的定义

循环数是指将一个数字的每个位数的平方相加,得到一个新的数字,再对新数字做同样的操作,直到得到一个数字重复出现为止。

例如,对于数字 298,它的每个位数的平方分别为 2^2 + 9^2 + 8^2 = 4 + 81 + 64 = 149,接着,对这个新数字 149 重复同样的操作,即得到:

1^2 + 4^2 + 9^2 = 1 + 16 + 81 = 98

9^2 + 8^2 = 81 + 64 = 145

1^2 + 4^2 + 5^2 = 1 + 16 + 25 = 42

4^2 + 2^2 = 16 + 4 = 20

2^2 + 0^2 = 4 + 0 = 4

可以发现,数字 298 的循环数为 4。

实现循环数

我们可以使用循环语句实现循环数的计算:

def get_loop_number(num):
    cycle_numbers = set()  # 用于存储每次的数字
    while True:
        total = 0
        for ch in str(num):
            total += int(ch)**2
        if total in cycle_numbers:
            return total
        cycle_numbers.add(total)
        num = total
测试样例
assert get_loop_number(298) == 4
assert get_loop_number(246) == 37
assert get_loop_number(89) == 145