首页 > 编程 > Python > 正文

python求解水仙花数的方法

2020-02-23 01:09:39
字体:
来源:转载
供稿:网友

本文实例讲述了python求解水仙花数的方法。分享给大家供大家参考。具体如下:

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

#!/usr/bin/pythondef 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<n:    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_countif __name__ == '__main__': with file('./f.txt', 'wb') as o:  get_flower(21, o)  #get_flower(3, o)

希望本文所述对大家的Python程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表