数字黑洞 6174 (Kaprekar 常数)

任取一个四位数(各位不全相同),把各位数字从大到小和从小到大各排成一个数,相减,重复这个过程,最多 7 步就会掉进 6174,然后永远停在 6174。

"""数字黑洞 6174 —— Kaprekar 常数探索器。"""
 
def kaprekar_step(n: int) -> int:
    digits = sorted(f"{n:04d}")
    asc = int("".join(digits))
    desc = int("".join(reversed(digits)))
    return desc - asc
 
def kaprekar_route(n: int) -> list[int]:
    route = [n]
    seen = {n}
    while True:
        nxt = kaprekar_step(route[-1])
        if nxt in seen:  # 防全同数字的 0000 陷阱
            break
        route.append(nxt)
        seen.add(nxt)
        if nxt == 6174:
            break
    return route
 
if __name__ == "__main__":
    print("例:3524 的坠落路线")
    print("  ", " -> ".join(str(x) for x in kaprekar_route(3524)))

下载源码: kaprekar.py