python中如何求水仙花数,python求解水仙花数

python求解水仙花数一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。

#!/usr/bin/python

def get_flower(n, ofile):

D_pow=[pow(i,n) for i in range(0,10)]

V_min=1*pow(10,n-1)

V_max=sum((9*pow(10,x) for x in range(0,n)))

T_count=0

print D_pow, V_max, V_min

nums=[1]+[0]*(n-1)

print 'Start:', nums

idx=n-1

tmp_l=[0]*10

while True:

nums[idx]+=1

if nums[idx]<10:

j=idx+1

while j

nums[j]=nums[idx] # reset

j+=1

v=sum((D_pow[x] for x in nums))

if v<=V_max and v>=V_min:

T_count+=1

#test if is flower

#print 'do test:', ''.join(map(str,nums))

k=0

while k<10:

tmp_l[k]=0

k+=1

N=0

for k in nums:

tmp_l[k]+=1

N+=1

while N>0:

p=v%10

if tmp_l[p]>0:

tmp_l[p]-=1

N-=1

else:

break

v/=10

if N==0:

print >>ofile, 'hit', sum((D_pow[x] for x in nums))

idx=n-1

elif idx==0:

print 'done'

break

else:

idx-=1

print 't_count', T_count

if __name__ == '__main__':

with file('./f.txt', 'wb') as o:

get_flower(21, o)

#get_flower(3, o)

开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明python求解水仙花数!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值