Python 获取N位阿姆斯特朗数之和程序
如果一个数的每位数字分别取出来,然后将这些数字的总和的N次方加在一起,如果结果等于这个数本身,则这个数被称为阿姆斯特朗数。在这个Python示例中,通过两个不同的示例介绍了找到N位阿姆斯特朗数之和的方法。在示例1中,给出了计算所有3位数阿姆斯特朗数之和的方法。在示例2中,可以由用户在运行时决定数字的位数。本程序使用了数字值4到6进行测试。
示例1 – 计算所有3位数阿姆斯特朗数之和。
步骤
步骤1 - 获取所有3位数的列表。将这个列表称为listofallNums。
步骤2 - 创建一个函数,如果一个数字的每位数字的总和的立方等于该数字本身,则返回该数字的所有位数字之和,否则返回-1。
步骤3 - 对于listofallNums中的所有数字,调用上述函数,如果返回值不是-1,则将其添加到名为listofArmStrNums的列表中。
步骤4 - 验证listofArmStrNums中的所有数字是否都是3位数的阿姆斯特朗数。然后将所有这些3位数的阿姆斯特朗数相加。
步骤5 - 运行程序,然后检查结果。
Python文件包含以下内容
numOfDigits=3
listofallNums=[]
listofArmStrNums=[]
listofsumparts=[]
def isArmStr(num, powof):
sum = 0
TNum = num
while TNum > 0:
digitt = TNum % 10
sum += digitt ** powof
TNum = TNum//10
if sum==num:
print('This is an Armstrong number', num)
return sum
else:
return -1
lowerNum=10**(numOfDigits-1)
highNum=10**(numOfDigits)
for item in range(lowerNum, highNum):
listofallNums.append(item)
lastelem=len(listofallNums)-1
print("listofallNums contains numbers from ",listofallNums[0], " to ", listofallNums[lastelem])
for itemn in listofallNums:
if(isArmStr(itemn, numOfDigits) != -1):
listofArmStrNums.append(itemn)
print("List of ArmStrong Numbers: ", listofArmStrNums)
for elem in listofArmStrNums:
listofsumparts=[]
summ=0
while elem > 0:
digittt = elem % 10
listofsumparts.append(digittt ** numOfDigits)
elem = elem//10
print(listofsumparts)
total=0
print("adding together: ")
for ele in range(0,len(listofsumparts)):
total = total + listofsumparts[ele]
print(total)
SumofallArmStrongnumbers=0
for element in listofArmStrNums:
SumofallArmStrongnumbers = SumofallArmStrongnumbers + element
print("Sum of all 3 digit ArmStrong numbers is ", SumofallArmStrongnumbers )
结果
要查看结果,请在cmd窗口中运行Python文件。
listofallNums contains numbers from 100 to 999
This is an Armstrong number 153
This is an Armstrong number 370
This is an Armstrong number 371
This is an Armstrong number 407
List of ArmStrong Numbers: [153, 370, 371, 407]
[27, 125, 1]
adding together:
153
[0, 343, 27]
adding together:
370
[1, 343, 27]
adding together:
371
[343, 0, 64]
adding together:
407
Sum of all 3 digit ArmStrong numbers is 1301
图1:显示在命令窗口中的结果。
示例2:找到所有 n 位数的阿姆斯特朗数的总和。
步骤
步骤1 − 输入数字的位数 N,并得到所有 N 位数的数字的列表。将该列表称为 listofallNums。
步骤2 − 创建一个函数,它将返回一个数的所有位数的幂次和,如果计算得到的和等于该数本身,则返回该和,否则返回-1。
步骤3 − 对 listofallNums 中的所有数字调用上述函数,如果值不为-1,则将其添加到名为listofArmStrNums 的列表中。
步骤4 − 验证 listofArmStrNums 中的所有数字是否为 N 位的阿姆斯特朗数。现在将所有这些 N 位阿姆斯特朗数相加。
步骤5 − 运行程序,然后检查4位数和5位数的结果。
Python 文件包括如下内容
numOfDigits = 5
listofallNums=[]
listofArmStrNums=[]
listofsumparts=[]
def isArmStr(num, powof):
sum = 0
TNum = num
while TNum > 0:
digitt = TNum % 10
sum += digitt ** powof
TNum = TNum//10
if sum==num:
print('This is an Armstrong number', num)
return sum
else:
return -1
lowerNum=10**(numOfDigits-1)
highNum=10**(numOfDigits)
for item in range(lowerNum, highNum):
listofallNums.append(item)
lastelem=len(listofallNums)-1
print("listofallNums contains numbers from ",listofallNums[0], " to ", listofallNums[lastelem])
for itemn in listofallNums:
if(isArmStr(itemn, numOfDigits) != -1):
listofArmStrNums.append(itemn)
print("List of ArmStrong Numbers: ", listofArmStrNums)
for elem in listofArmStrNums:
listofsumparts=[]
summ=0
while elem > 0:
digittt = elem % 10
listofsumparts.append(digittt ** numOfDigits)
elem = elem//10
print("list of sum subparts: ", listofsumparts)
total=0
print("adding together: ")
for ele in range(0,len(listofsumparts)):
total = total + listofsumparts[ele]
print(total)
SumofallArmStrongnumbers=0
for element in listofArmStrNums:
SumofallArmStrongnumbers = SumofallArmStrongnumbers + element
print("Sum of all ", numOfDigits, " digit ArmStrong numbers is ", SumofallArmStrongnumbers )
结果
打开cmd窗口并运行python文件即可查看结果。
listofallNums contains numbers from 10000 to 99999
This is an Armstrong number 54748
This is an Armstrong number 92727
This is an Armstrong number 93084
List of ArmStrong Numbers: [54748, 92727, 93084]
list of sum subparts: [32768, 1024, 16807, 1024, 3125]
adding together:
54748
list of sum subparts: [16807, 32, 16807, 32, 59049]
adding together:
92727
list of sum subparts: [1024, 32768, 0, 243, 59049]
adding together:
93084
Sum of all 5 digit ArmStrong numbers is 240559
图2:显示和n位数阿姆斯特朗数。
在这篇Python文章中,通过两个不同的示例介绍了找到n位数阿姆斯特朗数的总和的方法。在示例1中,给出了计算所有3位数阿姆斯特朗数之和的方法。在示例2中,用户可以在运行时决定数字的位数。如果用户输入4,它将给出所有4位数的阿姆斯特朗数及其总和。