📅  最后修改于: 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