题目描述
给定任一个各位数字不完全相同的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#非降序排列
def
To_n_up(l):
s
=
''
for
i
in
sorted
(l):
if
i !
=
'0'
:
s
+
=
i
return
int
(s)
#非降序排列(返回字符串,包含0)
def
To_n_up_with0(l):
s
=
''
for
i
in
sorted
(l):
s
+
=
i
return
s
#非升序排列
def
To_n_down(l):
s
=
''
for
i
in
sorted
(l, reverse
=
True
):
s
+
=
i
return
int
(s)
#将数字转换成字符串,前面补0
def
num_to_str(n):
s
=
str
(n)
while
len
(s)<
4
:
s
=
'0'
+
s
return
s
n
=
input
()
s
=
list
(num_to_str(n))
while
True
:
if
s[
0
]
=
=
s[
1
]
and
s[
1
]
=
=
s[
2
]
and
s[
2
]
=
=
s[
3
]:
print
(
"{} - {} = 0000"
.
format
(n, n))
break
print
(
str
(To_n_down(s))
+
' - '
+
To_n_up_with0(s)
+
' = '
+
'{}'
.
format
(num_to_str(To_n_down(s)
-
To_n_up(s))))
s
=
num_to_str(To_n_down(s)
-
To_n_up(s))
s
=
list
(s)
if
s
=
=
[
'6'
,
'1'
,
'7'
,
'4'
]:
break
|