编写函数计算任意位数的黑洞数。黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。例如 3 位黑洞数是 495,因为 954-459=495,4 位数字是 6174,因为 7641-1467=6174。
思路:
输入位数来确定循环范围,L,R来实现。在for循环内,例如321吧,将其拆分映射为[ 1, 2, 3] 和 [ 3, 2, 1],然后组合成数123 和 321。将其相减,若是满足规则就输出。
这思路说的简略了些,这里面涉及了很多转换,不想画图给你看了,懒!!!
# -*- coding:utf-8 -*-
import math
def Black(num):
B_num = []
L = int(math.pow(10,num-1))
R = int(math.pow(10,num))
for i in range(L,R):
list1 = list(map(str,str(i)))
list1.sort()
list_min = list1[:]
# 去除首位为0的元素
while list_min[0] == '0':
del list_min[0]
list1.sort(reverse=True)
list_max = list1[:]
# 化为整数
num_min= eval(''.join(list_min))
num_max = eval(''.join(list_max))
res = num_max - num_min
if res == i:
print(i)
num = eval(input("要计算几位的黑洞数?"))
Black(num)