Python 应用之阿姆斯特朗数
简介:如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。
例如 1^3 + 5^3 + 3^3 = 153
当 n=3 时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。
水仙花数共有 4 个,分别为:153、370、371、407。
10 的 40 次方以内的阿姆斯特朗数表部分内容,如下表:
具体实例:
以上的语句便是对于阿姆斯特朗数的应用,如何逐位进行数字的判断。
1.背景知识
如果一个 n 位正整数等于其各位数字的 n 次方之和,则称该数为阿姆斯特朗数。n = 3 时,这个数被称为水仙花数。如:
1-100000 的阿姆斯特朗数如下表所示:
2.具体的解题方法
用 input 函数请用户输入查找的区间
用 for 循环遍历这个区间的数值
判断位数,将数值拆分,计算每个位数上数字的 n 次方和
将计算出的值与该数值进行比较,若相等,则为阿姆斯特朗数,输出结果
3.解题方法
方法一
第 1-2 行: 定义变量 lower 和 upper,分别用 input 函数获取用户输入的最小值与最大值,int 函数将其转换为整型
第 4 行: 因为对正整数求阿姆斯特朗数,所以用 assert 断言函数限定变量 lower 和 upper 大于 0,若大于 0,执行后面的代码,否则报错“AssertionError: 请输入正整数!”
第 6 行: 用 for 循环遍历最小值与最大值之间所有的数
第 7 行: 创建变量 sum,初始赋值为 1,用于存储数值每个位数上数字的 n 次方和
第 8 行: 用 len 函数获取变量 num 的长度,也即该数值的位数
第 9 行: 将变量 num 赋值给变量 temp
第 11-14 行: 用 while 循环计算每个位数上数字的 n 次方和,当 temp > 0 时,进入循环,temp 除以 10 取余,获取该数值的个位数,计算个位数的 n 次方,继续将 temp 除以 10,对商取整,直至 temp 小于或等于 0 时退出 while 循环
第 16-17 行: 用 if 语句判断,若计算出的值与该数值相等,则用 print 函数输出结果
如,对数值 153,n = 3,digit = 153 % 10 = 3;sum = 0 + 3^3;temp //= 10 后为 15,继续进入下一次循环 digit= 15 % 10 = 5;sum = 0 + 3^3 + 5^3;temp //= 10 后为 1, 继续进入下一次循环 digit = 1 % 10 = 1;sum = 0 + 3^3 + 5^3 + 1^3,temp //= 10 后为 0, 退出 while 循环
方法二
第 1-2 行: 定义变量 lower 和 upper,分别用 input 函数获取用户输入的最小值与最大值,int 函数将其转换为整型
第 4 行: 因为对正整数求阿姆斯特朗数,所以用 assert 断言函数限定变量 lower 和 upper 大于 0,若大于 0,执行后面的代码,否则报错“AssertionError: 请输入正整数!”
第 6 行: 用 for 循环遍历最小值与最大值之间所有的数
第 7 行: 创建变量 sum,初始赋值为 1,用于存储数值每个位数上数字的 n 次方和,计算每个位数上数字的 n 次方和
第 8 行: 用 len 函数获取变量 num 的长度,也即该数值的位数
第 10-11 行: 用 str 函数将 num 转换为字符串类型,for 循环遍历字符串中的每一个元素
第 13-14 行: 用 if 语句判断,若计算出的值与该数值相等,则用 print 函数输出结果
如,对数值 153,n = 3,
第一次 for 循环,i = 1,sum = 0 + 1^3;
第二次 for 循环,i = 5,sum = 0 + 1^3 + 5^3;
第三次 for 循环,i = 3,sum = 0 + 1^3 + 5^3+ 3^3
方法三
代码运行效果:
关于阿姆斯特朗数的应用,可以根据数字的逐位判断方法进行熟悉,一般会涉及到循环和判断等指令,大家可以灵活的使用。
版权声明: 本文为 InfoQ 作者【向阳逐梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/279ef6a1040677681bb800c90】。文章转载请联系作者。
评论