python实现黑洞数字

def max(n):
    a = []
    while n / 1 != 0:
        if n % 10 == 0:
            k = 0
        else:
            k = n % 10
        n = n / 10
        a.append(int(k))
        if n < 1:
            break
    a.sort(reverse=1)  # 将得到的每个位数上的数字进行从大到小排序
    c = [str(i) for i in a]  # 将每一个数字转换成字符串
    d = "".join(c)  # 添加到字符串中组合
    e = int(d)
    return e


def min(n):
    b = []
    while n / 1 != 0:
        if n % 10 == 0:
            k = 0
        else:
            k = n % 10
        n = n / 10
        b.append(int(k))
        if n < 1:
            break
    b.sort()  # 将得到的每个位数上的数字进行从小到大排序
    c = [str(i) for i in b]  # 将每一个数字转换成字符串
    d = "".join(c)  # 添加到字符串中组合
    e = int(d)
    return e


x = int(input("请输入一个数字位数为x:"))
a = set()
for y in range(10**(x-1), 10**x):
    z = max(y) - min(y)
    # print(z)
    if z == y:
        a.add(z)
if len(a) != 0:
    for i in a:
        print("{}位数的黑洞数是:{}".format(x, i))
else:
    print("{}位数没有黑洞数".format(x))

# 任务一、编写函数计算任意位数的黑洞数。
# 实验描述:
# 黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。
# 例如3位黑洞数是495,因为954-459=495,4位数字是6174,因为7641-1467=6174。

在这个题目的解决过程中,我遇到了一个问题,就是当我取得每个位置上的数字的时候并没有及时的结束循环,从而导致计算失败,当一个个位数最后取余之后并没有加入结束循环的语句。我发现问题之后使用:

if n < 1:
    break

及时的跳出循环。

这道题大致的解题思路就是使用random生成数字时候,创建一个列表,对生成数字n求出每个位置上的数字放进列表中,然后对列表中的数字使用sort()进行排序这样就求得了它的组成的最大值Max和最小值Min,然后再把它变成字符串之后进行拼接成整数型。最后的判断就很简单了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值