一般方法:
#!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 4.黑洞数.py @time: 2016/3/21 18:16 """ # a = [4,6,2,4,5] # a.sort() # print(a) # print(a[::-1]) # def func(): # pass # b = 254 # list_b = [] # while b >0: # list_b.append(b % 10) # b //= 10 # print(list_b) # list_b = list_b[::-1] # s = 0 # for x in list_b: # s = s *10 +x # print(s) def fun(n): print(n) a =[] k = n while k >0: a.append(k % 10) k //=10 a.sort()# 小到大排序 [2, 3, 5, 8] #print(a) s1 = 0 for x in a[::-1]:#反转 s1 = s1 *10 +x # 8532 s2 = 0 for x in a: s2 = s2 *10 + x # 2358 if s1 -s2 ==n: return n else: return fun(s1 - s2) res = fun(1234) print("rea:",res)
优化后
from functools import reduce def fun(n): print(n) a = [int(c) for c in str(n)] a.sort() s1 = reduce(lambda x,y: 10*x + y ,a[::-1]) s2 = reduce(lambda x,y: 10*x + y,a) return n if s1 -s2 == n else fun(s1 - s2) res = fun(1234) print("res:",res)