python 实现armstrong numbers阿姆斯壮数算法

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

armstrong numbers阿姆斯壮数算法介绍

阿姆斯壮数(Armstrong numbers),也称为自恋性数(Narcissistic numbers)、水仙花数(Narcissistic number,特指三位数的情况),是指一个n位数,它的每个位上的数字的n次幂之和便是它自己。例如,一个三位数abc(a、b、c分别代表百位、十位和个位),如果满足a^3 + b^3 + c^3 = abc,则它是一个三位的阿姆斯壮数。
对于更一般的情况,我们可以编写一个算法来检查任意给定的数是否为阿姆斯壮数。以下是一个Python语言的实现示例:
  1. def is_armstrong_number(n):
  2.     """
  3.     检查n是否为阿姆斯壮数
  4.     :param n: 待检查的数
  5.     :return: 如果n是阿姆斯壮数返回True,否则返回False
  6.     """
  7.     # 转换为字符串方便遍历每一位
  8.     num_str = str(n)
  9.     # 获取位数
  10.     order = len(num_str)
  11.     # 初始化幂之和
  12.     sum_of_powers = 0
  13.    
  14.     # 遍历每一位
  15.     for digit in num_str:
  16.         # 将字符转换为整数并计算其order次幂
  17.         sum_of_powers += int(digit) ** order
  18.    
  19.     # 如果幂之和等于原数,则为阿姆斯壮数
  20.     return sum_of_powers == n
  21. # 示例
  22. print(is_armstrong_number(153))  # True,因为 1^3 + 5^3 + 3^3 = 153
  23. print(is_armstrong_number(123))  # False
  24. print(is_armstrong_number(370))  # False
  25. print(is_armstrong_number(371))  # True,因为 3^3 + 7^3 + 1^3 = 371
复制代码
这个算法首先确定了一个数的位数,然后遍历每一位,将其转换为整数并盘算其相应次幂的和。如果这个和便是原数,那么这个数就是一个阿姆斯壮数。
注意,这个算法的时间复杂度主要由位数决定,对于非常大的数(位数非常多),盘算大概会比力慢。然而,由于阿姆斯壮数自己的定义,实际应用中很少必要处理非常大的数。
armstrong numbers阿姆斯壮数算法python实现样例

Armstrong numbers(阿姆斯壮数)是指一个 n 位数,它的每一位的 n 次幂之和便是它自己。
下面是利用 Python 实现 Armstrong numbers 的算法:
  1. def is_armstrong_number(number):
  2.     # 将数字转为字符串,以便遍历每一位数
  3.     str_number = str(number)
  4.     # 获取数字的位数
  5.     num_digits = len(str_number)
  6.     # 初始化阿姆斯壮数的和为0
  7.     armstrong_sum = 0
  8.    
  9.     # 遍历每一位数
  10.     for digit in str_number:
  11.         # 将字符串类型的数字转为整数类型
  12.         digit = int(digit)
  13.         # 计算每一位数的 n 次幂,并加到阿姆斯壮数的和中
  14.         armstrong_sum += digit ** num_digits
  15.    
  16.     # 判断阿姆斯壮数的和是否等于原始数字
  17.     if armstrong_sum == number:
  18.         return True
  19.     else:
  20.         return False
  21. # 测试阿姆斯壮数算法
  22. for i in range(1, 1001):
  23.     if is_armstrong_number(i):
  24.         print(i)
复制代码
在上面的代码中,is_armstrong_number 函数用于判断给定的数字是否为阿姆斯壮数。我们遍历数字的每一位数,将每一位数的 n 次幂加到阿姆斯壮数的和中,末了判断阿姆斯壮数的和是否便是原始数字。如果相等,则说明该数字是阿姆斯壮数。
在测试部门,我们遍历从 1 到 1000 的所有数字,并调用 is_armstrong_number 函数来判断是否是阿姆斯壮数,如果是,则打印该数字。
运行以上代码,会输出以下结果:
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 153
  11. 370
  12. 371
  13. 407
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表