水仙花数字的通用算法(可计算21,34,甚至39位的水仙花数)

weishuo = input("Input :")
print('*' * 50)
number = [[x * i ** weishuo for x in range(weishuo+1)]for i in range(10)]
matchlist = [0 for x in range(10)]
s = [x for x in range(10)]
bignumber = 0
flag = 1

max = 10 ** weishuo
if weishuo is 1:
	min = 0
else :
	min = 10 ** (weishuo-1)

max9 = max // number[9][1]
min9 = min // number[9][1]

for s[9] in range(min9,max9+1):
	for s[8] in range(0,weishuo-s[9]+1):
		for s[7] in range(0,weishuo-s[9]-s[8]+1):
			for s[6] in range(0,weishuo-s[9]-s[8]-s[7]+1):
				for s[5] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]+1):
					for s[4] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]-s[5]+1):
						for s[3] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]-s[5]-s[4]+1):
							for s[2] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]-s[5]-s[4]-s[3]+1):
								for s[1] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]-s[5]-s[4]-s[3]-s[2]+1):

									bignumber = number[1][s[1]]+number[2][s[2]]+number[3][s[3]]+number[4][s[4]]+number[5][s[5]]+number[6][s[6]]+number[7][s[7]]+number[8][s[8]]+number[9][s[9]]
									
									if bignumber < min:
										break;
									
									tempnumber = bignumber
									
									while(bignumber):
										matchlist[bignumber % 10] += 1
										bignumber = bignumber // 10
									
									for x in range(1,10):
										if matchlist[x] is not s[x]:
											flag = 0
											break
									if flag:
										print(tempnumber)
									
									matchlist = [0 for x in range(10)]
									flag = 1

还没有写过文章呢,第一次发表呃。。。

也是自己没事干写着玩的。。。

用python写的。。

代码就在上面了。。。

写的嘛。。凌乱不堪喽。。

学习python也没有多长时间。。。

也就这样吧。。

这是我计算39位水仙花数字的截图。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值