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

armstrong numbers阿姆斯壮数算法介绍

阿姆斯壮数(Armstrong numbers),也称为自恋性数(Narcissistic numbers)、水仙花数(Narcissistic number,特指三位数的情形),是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。例如,一个三位数abc(a、b、c分别代表百位、十位和个位),如果满足a^3 + b^3 + c^3 = abc,则它是一个三位的阿姆斯壮数。

对于更一般的情况,我们可以编写一个算法来检查任意给定的数是否为阿姆斯壮数。以下是一个Python语言的实现示例:

python 复制代码
def is_armstrong_number(n):
    """
    检查n是否为阿姆斯壮数
    :param n: 待检查的数
    :return: 如果n是阿姆斯壮数返回True,否则返回False
    """
    # 转换为字符串方便遍历每一位
    num_str = str(n)
    # 获取位数
    order = len(num_str)
    # 初始化幂之和
    sum_of_powers = 0
    
    # 遍历每一位
    for digit in num_str:
        # 将字符转换为整数并计算其order次幂
        sum_of_powers += int(digit) ** order
    
    # 如果幂之和等于原数,则为阿姆斯壮数
    return sum_of_powers == n

# 示例
print(is_armstrong_number(153))  # True,因为 1^3 + 5^3 + 3^3 = 153
print(is_armstrong_number(123))  # False
print(is_armstrong_number(370))  # False
print(is_armstrong_number(371))  # True,因为 3^3 + 7^3 + 1^3 = 371

这个算法首先确定了一个数的位数,然后遍历每一位,将其转换为整数并计算其相应次幂的和。如果这个和等于原数,那么这个数就是一个阿姆斯壮数。

注意,这个算法的时间复杂度主要由位数决定,对于非常大的数(位数非常多),计算可能会比较慢。然而,由于阿姆斯壮数本身的定义,实际应用中很少需要处理非常大的数。

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

Armstrong numbers(阿姆斯壮数)是指一个 n 位数,它的每一位的 n 次幂之和等于它本身。

下面是使用 Python 实现 Armstrong numbers 的算法:

python 复制代码
def is_armstrong_number(number):
    # 将数字转为字符串,以便遍历每一位数
    str_number = str(number)
    # 获取数字的位数
    num_digits = len(str_number)
    # 初始化阿姆斯壮数的和为0
    armstrong_sum = 0
    
    # 遍历每一位数
    for digit in str_number:
        # 将字符串类型的数字转为整数类型
        digit = int(digit)
        # 计算每一位数的 n 次幂,并加到阿姆斯壮数的和中
        armstrong_sum += digit ** num_digits
    
    # 判断阿姆斯壮数的和是否等于原始数字
    if armstrong_sum == number:
        return True
    else:
        return False


# 测试阿姆斯壮数算法
for i in range(1, 1001):
    if is_armstrong_number(i):
        print(i)

在上面的代码中,is_armstrong_number 函数用于判断给定的数字是否为阿姆斯壮数。我们遍历数字的每一位数,将每一位数的 n 次幂加到阿姆斯壮数的和中,最后判断阿姆斯壮数的和是否等于原始数字。如果相等,则说明该数字是阿姆斯壮数。

在测试部分,我们遍历从 1 到 1000 的所有数字,并调用 is_armstrong_number 函数来判断是否是阿姆斯壮数,如果是,则打印该数字。

运行以上代码,会输出以下结果:

复制代码
1
2
3
4
5
6
7
8
9
153
370
371
407
相关推荐
tkevinjd26 分钟前
MiniCode 项目详解6:原项目控制系统的10个缺陷(已修复)
python·llm·agent
dNGUZ7UGj2 小时前
10分钟完成第一个Python小游戏
python·django
2601_954526752 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
没有梦想的咸鱼185-1037-16632 小时前
AI-Python机器学习与深度学习技术:CNN/Transformer/扩散模型、SHAP可解释及Hermes智能体自动化
人工智能·python·深度学习·机器学习·chatgpt·cnn·transformer
霸道流氓气质2 小时前
SpringBoot中通用工具类库(Utils)封装与使用实践
spring boot·后端·python
叩码以求索3 小时前
浅谈:算法萌新如何高效刷题应对面试(一)
算法·面试·职场和发展
Draina4 小时前
CBC填充预言攻击-CBC Padding Oracle Crypto Attack
python·安全·web安全·网络安全·密码学·安全性测试
c238564 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
Angel Q.4 小时前
特征提取 | DINO 到 DINOv3
图像处理·python
不如语冰5 小时前
AI大模型入门-pytorch-张量2 tensor创建
python