给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入描述:
输入给出一个(0, 10000)区间内的正整数N。
输出描述:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例,每行中间没有空行。注意每个数字按4位数格 式输出。
输入例子:
6767
输出例子:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
代码测试坑点:
1,任意4位正整数,其中有个3样例输入,需要自己补齐为0003,
代码实现:
#按照输出标准进行输出
def count_judge(num):
a = list(str(num))
num_A = int(''.join(sorted(a,reverse =True)))
num_B = int(''.join(sorted(a)))
result = num_A - num_B
if result == 0:
print(''.join(sorted(a,reverse =True)) +' - '+ ''.join(sorted(a))+" = "+"0000")
else:
print(''.join(sorted(a,reverse =True)) +' - '+ ''.join(sorted(a))+" = " +str(result))
return result
def main():
#字符串右后自动补0
string_num = input()
string_num =string_num.ljust(4,'0')
flag = 0
while flag ==0:
result = count_judge(string_num)
if result ==0:
break
if result == 6174:
flag = 1
else:
string_num = result
if __name__ == "__main__":
main()
本文介绍了一种数学现象,即通过特定操作使任意四位数最终收敛到6174这一神奇数字的过程,被称为数字黑洞或Kaprekar常数。文章详细解释了这一过程,并提供了Python代码实现。

1087

被折叠的 条评论
为什么被折叠?



