Python练习题——自幂数(水仙花数)

题目来源:Python语言程序设计(中国大学MOOC)
授课老师:嵩天、黄天羽、礼欣

题目描述:

“3位水仙花数”是指一个三位整数,其各位数字的3次方和等于该数本身。例如:ABC是一个”3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。

请按照从小到大的顺序输出所有的3位水仙花数,请用”逗号”分隔输出结果。

代码:

output = []
for d in range(100, 1000):
    x = d//100
    y = (d%100)//10
    z = d%10
    s = x**3 + y**3 + z**3
    if s == d:
        output.append(d)
#以下为输出格式调整
for i in range(len(output)):
    if i < len(output)-1:
        print(output[i], end=',')
    else:
        print(output[i])

输出结果:
153,370,371,407


自幂数

以下内容来自百度百科:自幂数

自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数。)
n为1时,自幂数称为独身数。显然,0,1,2,3,4,5,6,7,8,9都是自幂数;
n为2时,没有自幂数;
n为3时,自幂数称为水仙花数,有4个:153,370,371,407;
n为4时,自幂数称为四叶玫瑰数,共有3个:1634,8208,9474;
n为5时,自幂数称为五角星数,共有3个:54748,92727,93084;
n为6时,自幂数称为六合数,只有1个:548834;
n为7时,自幂数称为北斗七星数,共有4个:1741725,4210818,9800817,9926315;
n为8时,自幂数称为八仙数,共有3个:24678050,24678051,88593477;
n为9时,自幂数称为九九重阳数,共有4个:146511208,472335975,534494836,912985153;
n为10时,自幂数称为十全十美数,只有1个:4679307774。

要求:给定n,计算所有n位数的自幂数

代码一:

n = eval(input()) #n为获取用户输入的整数位数,当n=3时即为计算水仙花数
output = []
for d in range(pow(10,n-1), pow(10,n)):
    s = 0
    digits = []
    for x in range(n):
        if x == 0:
            digit = d//pow(10,n-1-x)
        else:
            digit = (d%pow(10,n-x))//pow(10,n-1-x)
        digits.append(digit)
    for digit in digits:
        s += pow(digit, n)
    if s == d:
        output.append(d)
#print(output)
for i in range(len(output)):
    if i < len(output)-1:
        print(output[i], end=',')
    else:
        print(output[i])

代码二:

n = eval(input()) #n为正整数位数
output = []
for d in range(pow(10,n-1), pow(10,n)):
    s = 0
    digits = []
    for x in range(n):
        digit = d//pow(10,x)%10
        digits.append(digit)
    for digit in digits:
        s += pow(digit, n)
    if s == d:
        output.append(d)
print(output)

代码三:

n = eval(input()) #n为正整数位数
output = []
for d in range(pow(10,n-1), pow(10,n)):
    s = 0
    for digit in str(d):
        s += pow(int(digit), n)
    if s == d:
        output.append(d)
print(output)

更新:

要求:给定任意两个自然数,输出这两个自然数(包含)之间的所有自幂数

a, b = eval(input())
output = []
max = max(a, b)
min = min(a, b)
for d in range(min, max+1):
    s = 0
    temp = d
    l = len(str(d)) #l为当前自然数的位数
    while temp:
        s = s + (temp%10)**l
        temp = temp//10
    if s == d:
        output.append(d)
print(output)

你可能感兴趣的:(Python)