美文网首页
随记_求N位数范围内的所有自幂数

随记_求N位数范围内的所有自幂数

作者: DragonFangQy | 来源:发表于2018-04-08 22:59 被阅读0次

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

    相关文章

      网友评论

          本文标题:随记_求N位数范围内的所有自幂数

          本文链接:https://www.haomeiwen.com/subject/vbkvhftx.html