自幂数【Python】
问题描述:
用户输入位数 n,找出并显示出所有 n 位数的自幂数。所谓自幂数就是指一个n为正整数,如果它的各位数字的 n 次方的和加起来还等于这个数,数学家称这样的数为自幂数。例如1^3+5^3+3^3=153,这样153就是一个 3 位的自幂数,3 位自幂数也称为水仙花数。
问题分析:
这个示例位数取1-6,所以位数的控制就可以用循环。一个 n 位数,它的最小值是10^(n-1),最大值是10^n-1,因此内存循环可以用一个 for 循环来遍历所有的 n 位数。然后是取每个位数上的数字,一个n位数对10 取余就可以获得个位上的数字,然后被 10 整除再对 10 取余就是十位上的数字,一直重复就可以获得每个位数上的数字,这个过程可以使用 while 循环控制,随着被 10 整除,它就越来越小,当它为 0 的时候,就说明取完了所有的数位。
源程序:
start=0
end=0
digit=0
m=0
n=int(input("请选择自幂数的位数【1,2,3,4,5,6】:"))
while 0<n<7: #把输入的数字控制在1-6
start=pow(10,n-1) #n位数的最小数
end=pow(10,n)-1 #n位数的最小数
print(n,"位数的自幂数有:")
for i in range(start,end+1): #遍历所有n位数
m=i
total=0
while m!=0: #得到每一位数
digit=m%10
total+=pow(digit,n) #每一位数字的n次方累加
m=m//10 #整除(去掉刚刚已经累加过的位数上的数
if total==i: #判断是否是自幂数,如果是则显示
print(str(i),end=' ')
n=int(input("\n请选择自幂数的位数【1,2,3,4,5,6】:"))
else:
print('输入位数不在范围内!')
输出:
请选择自幂数的位数【1,2,3,4,5,6】:5
5 位数的自幂数有:
54748 92727 93084
请选择自幂数的位数【1,2,3,4,5,6】:6
6 位数的自幂数有:
548834
请选择自幂数的位数【1,2,3,4,5,6】:7
输入位数不在范围内!