"""
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",
因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
"""
def answer1():
"""
正常for循环比较
:return:
"""
print("输出一", end=":")
for i in range(100, 1000):
a = i // 100
b = i % 100 // 10
c = i % 10
if i == a ** 3 + b ** 3 + c ** 3:
print(i, end=",")
answer1()
def answer2():
"""
逆向思维,有三个一位数组合成一个三位数
:return:
"""
print("
输出二", end=":")
for i in range(1, 10):
for j in range(0, 10):
for k in range(0, 10):
if i ** 3 + j ** 3 + k ** 3 == i * 100 + j * 10 + k:
print(i * 100 + j * 10 + k, end=",")
answer2()
def answer3():
"""
通过类型转换来获取三位数的各位数值
:return:
"""
print("
输出三", end=":")
for i in range(100, 1000):
s = str(i)
if pow(int(s[0]), 3) + pow(int(s[1]), 3) + pow(int(s[2]), 3) == i:
print(i, end=",")
answer3()
def answer4():
"""
领用divmod函数来计算
:return:
"""
print("
输出四", end=":")
for i in range(100, 1000):
m = i
sumNum = 0
while m > 0:
m, n = divmod(m, 10)
sumNum += n ** 3
if sumNum == i:
print(i, end=",")
answer4()
def answer5():
"""
利用列表for if 用法来实现
:return:
"""
print("
输出五", end=":")
L = [i for i in range(100, 1000) if (i // 100) ** 3 + (i // 10 % 10) ** 3 + (i % 10) ** 3 == i]
print(L)
answer5()