写点什么

Python 应用之阿姆斯特朗数

作者:向阳逐梦
  • 2022 年 10 月 03 日
    四川
  • 本文字数:1956 字

    阅读完需:约 6 分钟

简介:如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。

例如 1^3 + 5^3 + 3^3 = 153

当 n=3 时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。

水仙花数共有 4 个,分别为:153、370、371、407。

10 的 40 次方以内的阿姆斯特朗数表部分内容,如下表:

具体实例:

num = 0while True:sum = 0 # 初始化和n = len(str(num)) # 数值的位数temp = numwhile temp > 0:digit = temp % 10 # 取num的个位数sum += digit ** n # 个位数的位数次方加入和中temp //= 10 # num整除10 回到循环顶部取十位数 以此类推if num == sum:print(sum)num += 1
复制代码

以上的语句便是对于阿姆斯特朗数的应用,如何逐位进行数字的判断。

1.背景知识

如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。n = 3 时,这个数被称为水仙花数。如:

1-100000 的阿姆斯特朗数如下表所示:

2.具体的解题方法

  • 用 input 函数请用户输入查找的区间

  • 用 for 循环遍历这个区间的数值

  • 判断位数,将数值拆分,计算每个位数上数字的 n 次方和

  • 将计算出的值与该数值进行比较,若相等,则为阿姆斯特朗数,输出结果

3.解题方法

方法一

lower = int(input("请输入最小值: "))upper = int(input("请输入最大值: "))
assert lower > 0 and upper > 0, "请输入正整数!"
for num in range(lower, upper + 1): sum = 0 n = len(str(num)) temp = num while temp > 0: digit = temp % 10 sum += digit ** n temp //= 10
if num == sum: print(num, end=' ')
复制代码

第 1-2 行: 定义变量 lower 和 upper,分别用 input 函数获取用户输入的最小值与最大值,int 函数将其转换为整型

第 4 行: 因为对正整数求阿姆斯特朗数,所以用 assert 断言函数限定变量 lower 和 upper 大于 0,若大于 0,执行后面的代码,否则报错“AssertionError: 请输入正整数!”

第 6 行: 用 for 循环遍历最小值与最大值之间所有的数

第 7 行: 创建变量 sum,初始赋值为 1,用于存储数值每个位数上数字的 n 次方和

第 8 行: 用 len 函数获取变量 num 的长度,也即该数值的位数

第 9 行: 将变量 num 赋值给变量 temp

第 11-14 行: 用 while 循环计算每个位数上数字的 n 次方和,当 temp > 0 时,进入循环,temp 除以 10 取余,获取该数值的个位数,计算个位数的 n 次方,继续将 temp 除以 10,对商取整,直至 temp 小于或等于 0 时退出 while 循环

第 16-17 行: 用 if 语句判断,若计算出的值与该数值相等,则用 print 函数输出结果

如,对数值 153,n = 3,digit = 153 % 10 = 3;sum = 0 + 3^3;temp //= 10 后为 15,继续进入下一次循环 digit= 15 % 10 = 5;sum = 0 + 3^3 + 5^3;temp //= 10 后为 1, 继续进入下一次循环 digit = 1 % 10 = 1;sum = 0 + 3^3 + 5^3 + 1^3,temp //= 10 后为 0, 退出 while 循环​

方法二

lower = int(input("请输入最小值: "))upper = int(input("请输入最大值: "))
assert lower > 0 and upper > 0, "请输入正整数!"
for num in range(lower, upper + 1): sum = 0 n = len(str(num)) for i in str(num): sum += int(i) ** n
if num == sum: print(num, end=' ')
复制代码

第 1-2 行: 定义变量 lower 和 upper,分别用 input 函数获取用户输入的最小值与最大值,int 函数将其转换为整型

第 4 行: 因为对正整数求阿姆斯特朗数,所以用 assert 断言函数限定变量 lower 和 upper 大于 0,若大于 0,执行后面的代码,否则报错“AssertionError: 请输入正整数!”

第 6 行: 用 for 循环遍历最小值与最大值之间所有的数

第 7 行: 创建变量 sum,初始赋值为 1,用于存储数值每个位数上数字的 n 次方和,计算每个位数上数字的 n 次方和

第 8 行: 用 len 函数获取变量 num 的长度,也即该数值的位数

第 10-11 行: 用 str 函数将 num 转换为字符串类型,for 循环遍历字符串中的每一个元素

第 13-14 行: 用 if 语句判断,若计算出的值与该数值相等,则用 print 函数输出结果

如,对数值 153,n = 3,

第一次 for 循环,i = 1,sum = 0 + 1^3;

第二次 for 循环,i = 5,sum = 0 + 1^3 + 5^3;

第三次 for 循环,i = 3,sum = 0 + 1^3 + 5^3+ 3^3 ​

方法三

# Python 检测用户输入的数字是否为阿姆斯特朗数 # 获取用户输入的数字num = int(input("请输入一个数字: ")) # 初始化变量 sumsum = 0# 指数n = len(str(num)) # 检测temp = numwhile temp > 0:   digit = temp % 10   sum += digit ** n   temp //= 10 # 输出结果if num == sum:   print(num,"是阿姆斯特朗数")else:   print(num,"不是阿姆斯特朗数")
复制代码

代码运行效果:

请输入一个数字: 345345 不是阿姆斯特朗数
请输入一个数字: 153153 是阿姆斯特朗数
请输入一个数字: 16341634 是阿姆斯特朗数
复制代码

关于阿姆斯特朗数的应用,可以根据数字的逐位判断方法进行熟悉,一般会涉及到循环和判断等指令,大家可以灵活的使用。

发布于: 刚刚阅读数: 5
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022.06.01 加入

InfoQ签约作者、阿里云“乘风者计划”签约博主

评论

发布
暂无评论
Python应用之阿姆斯特朗数_Python语法_向阳逐梦_InfoQ写作社区