隨記_求N位數範圍內的所有自冪數

今天遇到了一道題,讓用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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章