【编程基础】利用Python实现阿姆斯特朗数的求解

举报
迷彩 发表于 2023/05/29 22:30:09 2023/05/29
【摘要】 前言阿姆斯特朗数是什么?阿姆斯特朗数是数学中的一个概念,多用于计算机语言编程。他的定义是:一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数,又称为自恋性数,当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。所以很多时候阿姆斯特朗数也称为水仙花数,水仙花数也是我们接触比较多的叫法。只讲概念可能会一头雾水,咱们继续看一个例子:比如:153这个数字,这是个3位数,...

前言

阿姆斯特朗数是什么?

阿姆斯特朗数是数学中的一个概念,多用于计算机语言编程。他的定义是:一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数,又称为自恋性数,当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。所以很多时候阿姆斯特朗数也称为水仙花数,水仙花数也是我们接触比较多的叫法。

只讲概念可能会一头雾水,咱们继续看一个例子:

比如:153这个数字,这是个3位数,那它每个位上的数字的3次方之和等于它本身,他就是阿姆斯特朗数或者水仙花数:1^3+5^3+3^3=153

我们再来做个对比:比如我们这次输入的数字是132,那这个数是阿姆斯特朗数吗?下面我们来计算看看是否符合我们上面所说的定义就知道:

132是3位数,那么1^3+3^3+2^3=38,显然不等于132,所以132不是阿姆斯特朗数

寻找这样的数太废手,接下来我们用Python代码来计算一个数是否阿姆斯特朗数.


寻找阿姆斯特朗的方法

穷举法

因为阿姆斯特朗数的出现没有一定的规律.所以我们使用穷举法进行寻找.穷举法的基本思想是根据题目部分条件确定答案的大致范围,并在这个范围内对所有可能的情况逐一验证,直到全部情况验证完毕.如果某个验证符合题目的全部条件,则为本问题的一个解,如果全部验证都不符合题目的全部条件,则本题无解.所以当答案范围越来越大时,需要耗时较长.这种方法也是比较直接且简单粗暴的做法.


涉及到的Python内容

从上面的概念可以得到.我们计算阿姆斯特朗数,需要知道每个数的位数.所以在实现的过程中会使用到Python的len()函数获取输入数字的长度,也就是数字的位数,len()方法可以返回对象(包括字符串,列表,元组等)的长度或项目个数

我们输入的是一个整数;要计算一个数字的长度.我们需要先将数字,转为字符串,这时候我们会使用到str()函数,这个函数就是把对象类型转换为字符串类型


实现流程

比如我们现在要求100-1000的阿姆斯特朗数,我们根据题目给出的范围展开分析实现流程

  1. 输入最小值min和最大值max

  2. 根据最大最小值.确定范围,建立for循环

  3. 使用len()计算数字位数

  4. 建立while循环,按照定义计算数字

  5. 判断上一步计算出来的数字是否与原来的数字相等

  6. 输出符合阿姆斯特朗数条件的数字


代码实现

根据上面的流程,进行代码的实现:计算100-1000内的阿姆斯特朗数

min = int(input("请输入最小值:"))
max = int(input("请输入最大值:"))

for num in range(min,max):
    sum = 0
    n = len(str(num)) #计算位数并赋值给n
    temp = num #定义临时变量,用于后续计算
    while temp > 0: #计算每一位数字值然后累加
        digit = temp % 10
        sum += digit ** n
        temp //= 10
    if sum == num:
        print(num)

执行结果如下:


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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