12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
程序源代码:
#!/usr/bin/python # -*- coding: UTF-8 -*- for n in range(100,1000): i = n / 100 j = n / 10 % 10 k = n % 10 if n == i ** 3 + j ** 3 + k ** 3: print n
以上实例输出结果为:
153 370 371 407
将三位数看成由三个数组成,并判断其各位数字立方和是否等于该数本身:
#!/usr/bin/python # -*- coding: UTF-8 -*- for x in range(1,10): for y in range(0,10): for z in range(0,10): s1=x*100+y*10+z s2=pow(x,3)+pow(y,3)+pow(z,3) if s1==s2: print "水仙花数有:%7ld" %(s1)
#!/usr/bin/python # -*- coding: UTF-8 -*- for i in range(100, 1000): s = str(i) if int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3 == i: print(i)
#!/usr/bin/env python # -*- coding: UTF-8 -*- L = [] for n in range(100,1000): i = n / 100 j = n /10 % 10 k = n % 10 if n == i ** 3 + j ** 3 + k ** 3: if n == pow(i,3) + pow(j,3) +pow(k,3): L.append(n) print(L) print len(L)
兼容 Python2.x 与 Python3.x,Python3.x 取整为 //,而不是 /, 参考方法:
#!/usr/bin/python3 # -*- coding: UTF-8 -*- for i in range(100,1000): h=i//100 t=(i-100*h)//10 s=i-100*h-10*t if i==h**3+t**3+s**3: print(i)
#!/usr/bin/env python # -*- coding: UTF-8 -*- a = 1 b = 1 c = 1 for a in range(0,10): for b in range(0,10): for c in range(0,10): if int(a)**3+int(b)**3+int(c)**3 == a*100+b*10+c and a != 0: x = a*100+b*10+c print(x)
#!/usr/bin/python # -*- coding: UTF-8 -*- for x in range(10): for y in range(10): for z in range(10): w = x*100 + y*10 + z if (w>100) and (w == x**3 + y**3 + z**3): print w
#!/usr/bin/python # -*- coding: UTF-8 -*- #列表解析法 l=[x**3+y**3+z**3 for x in range(0,10) for y in range(0,10) for z in range(0,10) if (str(x)+str(y)+str(z))==str(x**3+y**3+z**3)] print(l)
#!/usr/bin/python # -*- coding: UTF-8 -*- for n in range(100,1000): m = n sumValue = 0 while(m>0): (m,r) = divmod(m, 10) sumValue += r ** 3 if n == sumValue: print(n)
#coding:UTF-8 print [i for i in range(100,1000) if (i/100)**3+((i-i/100*100)/10)**3+(i%10)**3 == i]
Python3 参考:
#水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身 #生成器函数ppdi,可生成十进制自然数中的所有水仙花数,共有88个 def ppdi(): n=3 while 1: #生成器推导式 l=(i for i in range(10**(n-1),10**n) if sum([int(str(i)[j])**n for j in range(n)])==i) yield l n+=1 #最大的水仙花数有39位 def f(max): for i in ppdi(): for j in i: if j<10**max: print(j) else: break if j>10**max: break #为环保起见,建议7位以内即可 f(5)
这次的小例子有点意思。开始我都不知道水仙花数是什么鬼?嘿嘿。。。
如果感觉不错的话,请多多点赞支持哦。。。