1. 数字黑洞现象解析
数字黑洞(Digital Black Hole)是数学中一个有趣的现象,特指某些数字经过特定运算后会陷入固定循环或收敛到某个特定数值的过程。PTA B1019题目描述的数字黑洞现象,是指任何一个四位数字(各位数字不完全相同)经过特定减法运算后,最终都会收敛到6174这个神奇的数字。
这个现象最早由印度数学家D.R. Kaprekar在1949年发现,因此6174也被称为Kaprekar常数。对于三位数,类似的运算会收敛到495。这种现象展现了数学中数字排列与运算的奇妙规律性。
注意:进行数字黑洞运算时,必须确保原始数字的各位数字不完全相同,否则相减结果将为0,无法继续后续运算。
2. 算法实现步骤详解
2.1 输入处理与验证
首先需要处理用户输入的四位数字。虽然题目保证输入是四位正整数,但实际应用中应该添加验证逻辑:
python复制def validate_input(num):
if not 1000 <= num <= 9999:
raise ValueError("输入必须为四位正整数")
digits = [int(d) for d in str(num)]
if len(set(digits)) < 2:
raise ValueError("四位数字不能全部相同")
return digits
验证要点:
- 确保是4位数字(1000-9999)
- 检查各位数字不全相同
- 将数字转换为各位数字列表方便后续处理
2.2 数字重组与减法运算
核心运算步骤如下:
python复制def kaprekar_step(num):
digits = [int(d) for d in str(num).zfill(4)] # 确保总是4位数
desc = sorted(digits, reverse=True)
asc = sorted(digits)
num_desc = int(''.join(map(str, desc)))
num_asc = int(''.join(map(str, asc)))
return num_desc - num_as
