Python应用之阿姆斯特朗数

举报
二哈侠 发表于 2022/10/12 19:59:38 2022/10/12
【摘要】 简介:如果一个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(st...

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

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

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

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

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

具体实例:

num = 0
while True:
sum = 0 # 初始化和
n = len(str(num)) # 数值的位数
temp = num
while 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("请输入一个数字: "))
 
# 初始化变量 sum
sum = 0
# 指数
n = len(str(num))
 
# 检测
temp = num
while temp > 0:
   digit = temp % 10
   sum += digit ** n
   temp //= 10
 
# 输出结果
if num == sum:
   print(num,"是阿姆斯特朗数")
else:
   print(num,"不是阿姆斯特朗数")

代码运行效果:

请输入一个数字: 345
345 不是阿姆斯特朗数

请输入一个数字: 153
153 是阿姆斯特朗数

请输入一个数字: 1634
1634 是阿姆斯特朗数

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。