python求解水仙花数的方法
本文实例讲述了python求解水仙花数的方法。分享给大家供大家参考。具体如下:
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
#!/usr/bin/python
defget_flower(n,ofile):
D_pow=[pow(i,n)foriinrange(0,10)]
V_min=1*pow(10,n-1)
V_max=sum((9*pow(10,x)forxinrange(0,n)))
T_count=0
printD_pow,V_max,V_min
nums=[1]+[0]*(n-1)
print'Start:',nums
idx=n-1
tmp_l=[0]*10
whileTrue:
nums[idx]+=1
ifnums[idx]<10:
j=idx+1
whilej<n:
nums[j]=nums[idx]#reset
j+=1
v=sum((D_pow[x]forxinnums))
ifv<=V_maxandv>=V_min:
T_count+=1
#testifisflower
#print'dotest:',''.join(map(str,nums))
k=0
whilek<10:
tmp_l[k]=0
k+=1
N=0
forkinnums:
tmp_l[k]+=1
N+=1
whileN>0:
p=v%10
iftmp_l[p]>0:
tmp_l[p]-=1
N-=1
else:
break
v/=10
ifN==0:
print>>ofile,'hit',sum((D_pow[x]forxinnums))
idx=n-1
elifidx==0:
print'done'
break
else:
idx-=1
print't_count',T_count
if__name__=='__main__':
withfile('./f.txt','wb')aso:
get_flower(21,o)
#get_flower(3,o)
希望本文所述对大家的Python程序设计有所帮助。