8-3 【Python0004】验证6174猜想 分数 10 作者 doublebest 单位 石家庄铁道大学
【题目描述】1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】在一行中输入一个任意各位数字不相同的4位数。
【输出格式】验证6174猜想,输出过程中计算得到的各数,数据间以空格为间隔。
【输入样例】2694
【输出样例】2694 7173 6354 3087 8352 6174
def kaprekar_process(num):
# 循环直到得到6174
while num != 6174:
# 将数字转换为字符串,方便进行操作
num_str = str(num)
# 将数字字符串补齐到4位,不足的高位用'0'填充
while len(num_str) < 4:
num_str = '0' + num_str
# 将数字字符串按照非递减顺序排序得到最小数和最大数
min_num = int(''.join(sorted(num_str)))
max_num = int(''.join(sorted(num_str, reverse=True)))
# 计算差值并更新num
num = max_num - min_num
# 输出当前数
print(num, end=' ')
# 输入一个任意各位数字不相同的4位数
num = int(input("Enter a 4-digit number with distinct digits: "))
# 验证6174猜想并输出过程中计算得到的各数
print(num, end=' ')
kaprekar_process(num)