五色水仙

注册

 

发新话题 回复该主题

听过十全十美数吗这可不是灯谜用Pyth [复制链接]

1#

内容,我们探讨了Python打印输出“水仙花”数的几种方式(参见打印“水仙花数”,只有一种方法?Python带你用多种方式实现输出)。

水仙花

今天,我们来打印另一个有意思的数字,叫“十全十美”数!如果对Python不敢兴趣直接拉到文末会有答案!

十全十美数

01自幂数

接上篇内容讲,其实,水仙花数(Narcissisticnumber),也叫超完全数字不变数(pluperfectdigitalinvariant,PPDI)、自幂数、自恋数、阿姆斯特朗数(Armstrongnumber)等等。

它的定义

中打印输出的水仙花数其实是自幂数的一种,特指一个3位数,数字中每一位数的3次幂之和等于数字本身(例如:1^3+5^3+3^3=)

那么,各个位数的自幂数如何称呼呢?

一位自幂数:独身数

两位自幂数:没有

三位自幂数:水仙花数

四位自幂数:四叶玫瑰数

五位自幂数:五角星数

六位自幂数:六合数

七位自幂数:北斗七星数

八位自幂数:八仙数

九位自幂数:九九重阳数

十位自幂数:十全十美数

今天,我们用Python把它们都找出来。名字挺有趣,不是吗?

02如何打印输出自幂数

自幂数是指一个n位数N,它的每个位上的数字的n次幂之和等于N本身。

其实,和上篇内容提到的几种输出“水仙花”数的方法是通用的。

怎么找呢?

思路是这样的:先构造一个字典,用来存储各个位数的自幂数的名称;然后,定义一个函数用来判断任意一个数据是否是自幂数(参考前篇水仙花数打印内容);最后,我们循环遍历各个位数的数,打印输出自幂数及名称。

我们选择最后一种Pythonic的方法来打印输出10位以内的自幂数。

选个方便点的方法

存储各个位数自幂数的名称

info_dict={1:独身数,2:没有自幂数,3:水仙花数,4:四叶玫瑰数,5:五角星数,6:六合数,7:北斗七星数,8:八仙数,9:九九重阳数,10:十全十美数,}

判断一个数是否为自幂数

判断一个数是否为自幂数

defnarcissistic_number(num)/p>

s=str(num)

length=len(s)

sum_num=0

ifsum(pow(int(d),length)fordins)==num/p>

print(%d是%d位%(num,length,info_dict[length]))

复制代码按图示对齐即可运行。

输入最大数据位数,打印输出该范围内的所有自幂数

max_num=int(input(请输入数据位数:))

fornuminrange(0,10**max_num)/p>

narcissistic_number(num)

这样,我们就可以通过输入数据范围来获取这个范围内的所有自幂数了。

03如何让获取速度更快?

我们来看下上面程序运行效果:

自幂数结果

当然,最后要告诉大家十全十美数是什么了

是这个数:

但是,我的程序运行到九九重阳数时,就基本停止运行了,像上图这个状态,不晓得要等多久了……

等待中……

大家有没有好办法呢?输出指定位数的自幂数?如何让它更快呢?欢迎小伙伴们下方留言讨论。这个问题留给小伙伴们自己去思考吧,兴许

分享 转发
TOP
发新话题 回复该主题