今天遇到了一道題,讓用Python求100 - 999 之間的水仙花數,出於好奇百度了一下,發現水仙花數只是三位數的自冪數,問題來了,怎麼求N位數範圍內的所有自冪數?
先看看水仙花數求解過程
水仙花數
通過數學運算求解
通過數學運算取出每一位上的數
# 求水仙花數,範圍100 - 999
num_list = [] # 存放自冪數
for x in range(100,1000):
"""
(x//100) ** 3 # 獲取百位上的數
(x//10%10) ** 3 # 獲取十位上的數
(x%10) ** 3 # 獲取個位上的數
"""
if x == (x//100) ** 3 + (x//10%10) ** 3 + (x%10) ** 3 :
num_list.append(x)
print(num_list)
通過字符串求解
num_list = [] # 存放自冪數
for x in range(100,1000):
str_num = str(x) # 將三位數轉化成字符串
sum = 0 # 存放 百位的數冪 + 十位數的冪 + 個位數的冪
for y in str_num:
sum+= int(y) ** 3
if x == sum:
num_list.append(x)
print(num_list)
通過轉化字符串可以避免因爲運算錯誤造成的結果錯誤。
求N位 數的自冪數(N>0)
通過轉化字符串的形式,求解N位數範圍內的所有自冪數
def compute_self_power(number:int):
"""
計算N位 數的自冪數
:parameter number:str 位數
"""
power_list = [] # 存放自冪數
# 確定範圍,number =3 求 所有三位數的自冪數
# ==》自冪數可能出現的範圍是 100 - 1000 之間
# ==》 10 ** 3-1 - 10 ** 3 只之間
for x in range(10**(number-1),10**number):
str_num = str(x) # 轉換成字符串,方便取出每一位上的數,避免數學計算取出每一位上的數
sum = 0 # 算放所有位 數的冪運算之後的和
for y in str_num:
sum+= int(y) ** number # 計算當前位 數的冪運算
if x == sum:
power_list.append(x)
print(power_list)
def main():
compute_self_power(4)
if __name__ == "__main__":
main()
到此結 DragonFangQy 2018.4.8