自幂数

类型:字符串

描述

自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身,例如:1**3 + 5**3 + 3**3 = 153,编程寻找并输出 n 位的自幂数,n 由用户输入,每行输出一个数字。

  1. n为1时,自幂数称为独身数。显然,0,1,2,3, 4,5,6,7,8,9都是自幂数。
  2. n为2时,没有自幂数。
  3. n为3时,自幂数称为水仙花数,有4个
  4. n为4时,自幂数称为四叶玫瑰数,共有3个
  5. n为5时,自幂数称为五角星数,共有3个
  6. n为6时,自幂数称为六合数, 只有1个
  7. n为7时,自幂数称为北斗七星数, 共有4个
  8. n为8时,自幂数称为八仙数, 共有3个
  9. n为9时,自幂数称为九九重阳数,共有4个
  10. n为10时,自幂数称为十全十美数,只有1个

输入格式

输入一个大于或等于 3 且小于 7 的正整数 n

输出格式

按从小到大的顺序输出 n 位的自幂数,每行一个数

示例 1

输入:
4        
输出: 
1634 
8208 
9474

参考代码

def armstrong_number(num):
    """接受一个正整数为参数,判断是否是自幂数,返回布尔值"""
    total,tmp = 0,num
    while tmp != 0:
        total = total + table[tmp % 10]
        tmp = tmp // 10
    return num == total


def judge_num(n):
    """接受一个大于2的正整数为参数,输出n位自幂数"""
    for num in range(10 ** (n - 1), 10 ** n):
        if armstrong_number(num):
            print(num)


if __name__ == '__main__':
    m = int(input())
    table = [x ** m for x in range(11)]
    judge_num(m)

或后面这种,原理上一样,只是在判断自幂数的时候需要对每一位进行操作,或许变为字符串可以更简单的实现这一点。

def armstrong_number(num):
    """接受一个正整数为参数,判断是否是自幂数,返回布尔值"""
    total = 0
    for i in str(num):
        total = total + table[int(i)]
    if num == total:
        return True
    else:
        return False


def judge_num(n):
    """接受一个大于2的正整数为参数,输出n位自幂数"""
    for num in range(10 ** (n - 1), 10 ** n):
        if armstrong_number(num):
            print(num)


if __name__ == '__main__':
    m = int(input())
    table = [x ** m for x in range(10)]
    judge_num(m)
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐