什么是阿姆斯特朗数
阿姆斯特朗数(也称为自恋数或复数不变量)是数学中的一个概念,多用于计算机语言编程。
如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
例如1^3 + 5^3 + 3^3 = 153
当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。
水仙花数共有4个,分别为:153、370、371、407。
数字 371 是阿姆斯特朗数,因为:
3^3 + 7^3 + 1^3 = 371
数字 9474 是阿姆斯特朗数,因为:
9^4 + 4^4 + 7^4 + 4^4 = 9474
因此,一般来说,如果一个n位正整数等于其各位数字的n次方之和
再直白点的解释:阿姆斯特朗数等于其数字的立方体之和。
370 = 3*3*3 + 7*7*7 + 0*0*0 => 370 是阿姆斯特朗数。
下面我们通过 Python 的函数来检查一个数字是否是阿姆斯特朗数字:
方式1:
def is_armstrong_number(n):
digits = str(n)
num_digits = len(digits)
sum_of_digits = 0
for digit in digits:
sum_of_digits = sum_of_digits + int(digit) ** num_digits
return sum_of_digits == n
#test
print( is_armstrong_number(371))
方式2:
def is_armstrong_number(n):
# 将数字转换为字符串以计数数字
digits = str(n)
num_digits = len(digits)
# 计算提升到位数的幂的位数的总和
sum_of_digits = sum(int(digit)**num_digits for digit in digits)
# 检查数字之和是否等于原始数字
return sum_of_digits == n
方式3:
def is_armstrong(num):
# 求每个数字的立方和
sum = 0
temp = num
while temp > 0:
digit = temp % 10
sum += digit ** 3
temp //= 10
# 返回结果
return num == sum
# 接受用户的输入
num = int(input("输入一个整数: "))
# 调用函数并打印结果
if is_armstrong(num):
print(num, "是一个阿姆斯特朗数。")
else:
print(num, "不是一个阿姆斯特朗数。")
输出:
输入一个整数: 153
153 是一个阿姆斯特朗数
方法4:
# To check if a number is Armstrong Number or not
number = int(input("输入一个整数 : "))
i = 0
temp = number
while temp > 0:
digit = temp % 10
i += digit ** 3
temp //= 10
# Print result
if number == i:
print(number, "是一个阿姆斯特朗数")
else:
print(number, "不是一个阿姆斯特朗数")
输出:
输入一个整数 : 370
370 是一个阿姆斯特朗数
输入一个整数 : 125
125 不是一个阿姆斯特朗数
输入一个整数 : 153
153 是一个阿姆斯特朗数
代码解释:
def is_armstrong(num):
:此行定义了一个名为的is_armstrong
函数,该函数接受单个参数num
。sum = 0
:此行使用 0 初始化sum
变量,该变量将用于存储每个数字的立方体之和。temp = num
:此行创建变量num
的副本并将其存储在temp
中。while temp > 0:
:此行开始一个 while 循环,循环temp
一直持续到大于 0。digit = temp % 10
:此行使用模运算符,并将其存储在变量digit
中。sum += digit ** 3
:此行将digit
的立方体添加到变量sum
中。temp //= 10
:此行通过使用整数除法 (//
) 删除最后一位数字来更新变量temp
。return num == sum
:此行返回num
和sum
之间的比较结果。num = int(input("Enter a number: "))
:此行以整数形式接收用户的输入并将其存储在变量num
中。if is_armstrong(num):
:此行调用函数is_armstrong
并检查其返回值。print(num, "是一个阿姆斯特朗数")
:如果第 10 行num
中的条件为 true,则此行将打印消息。print(num, "不是一个阿姆斯特朗数")
:如果第 10 行中num
的条件为 false,则此行将打印消息。