趣味算法--⾃幂数
⾃幂数
⾃幂数是指⼀个n位数,它的每个位上的数字的n次幂之和等于它本⾝(例如:1^3+5^3+3^3=153)。⾃幂数包括:
⼀位⾃幂数:独⾝数
⼆位⾃幂数:没有
三位⾃幂数:⽔仙花数
四位⾃幂数:四叶玫瑰数
五位⾃幂数:五⾓星数
六位⾃幂数:六合数
七位⾃幂数:北⽃七星数
⼋位⾃幂数:⼋仙数
九位⾃幂数:九九重阳数
⼗位⾃幂数:⼗全⼗美数
常见⾃幂数
三位的⽔仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五⾓星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北⽃七星数共有4个:1741725,4210818,9800817,9926315;
⼋位的⼋仙花数共有3个:24678050,24678051,88593477
九位的九九重阳数共有4个:146511208,472335975,534494836,912985153
求n位⾃幂数
现在我们⽤代码来实现求各个位数的⾃幂数。
1#include
2
3//⾃定义my_pow函数,C语⾔⾃带的pow函数返回值为double类型
4//转long类型精度会缺失。
5longintmy_pow(inta,intn)
6{
7longresult=1;
8inti=0;
9for(i;i
10result*=a;
11
12returnresult;
13}
14
15//判断是否为⽔仙花数
16intisNarNum(longintnum,intn)
17{
18longintnumber=num;
19longintresult=0;
20
21inti;
22//获取各个位数,并求n次幂之和
23for(i=n-1;i>=0;i--)
24{
25result+=my_pow(number%10,n);
26number/=10;
27}
28
29returnresult==num?1:0;
30}
31
32//打印n位的⽔仙花数
33voidprintNarNum(intn)
34{
35longstart=my_pow(10,n-1);//n位数的起始位数
36intcount=0;//⽤于统计有多少个⾃幂数
37longnum=0;
38//打印⾃幂数
39for(num=start;num
40{//如果是⾃幂数则打印
41if(isNarNum(num,n))
42{
43printf("%ld是⾃幂数。",num);
44count++;
45}
46}
47printf("%d位的⾃幂数有%d个。",n,count);
48}
49
50intmain(void)
51{
52intn=0;
53printf("请输⼊求⼏位数的⾃幂数:");
54scanf("%d",&n);
55
56printNarNum(n);
57
58return0;
59}
60
61C语⾔实现求n位数⾃幂数
C语⾔实现求n位数⾃幂数
代码测试结果
r;
2
3publicclassNarNum{
4
5/**
6*⽤于判断⼀个数是否是⾃幂数。
7*@paramnum是需要进⾏⾃幂数判断的数。
8*@paramn需要判断的数的位数。
9*@return如果num是⾃幂数返回true,否则返回fal。
10*/
11publicstaticbooleanisNarNumber(longnum,intn){
12longtag=num;//将num赋值给tag,⽤于结果的判断
13longsum=0;//⽤于存储每个位上的数字的n次幂之和
14
15/*获取num的各个位的数*/
16for(inti=n-1;i>=0;i--){
17sum+=(num%10,n);
18num/=10;
19}
20
21returnsum==tag?true:fal;
22}
23
24/**
25*打印⾃幂数⽅法。
26*@paramn打印n位数的⾃幂数。
27*/
28publicstaticvoidprintNarNumber(intn){
29longnum=(long)(10,n-1);//n位数开始数字
30inttotal=0;//⽤于统计n位⽔仙花数的个数
31/*打印⾃幂数*/
32for(longi=num;i
33if(isNarNumber(i,n)){
n(i+"是⾃幂数。");
35total++;
36}
37}
n(n+"位的⾃幂数有:"+total+"个");
39}
40
41publicstaticvoidmain(String[]args){
42Scannerinput=newScanner();
n("请输⼊⾃幂数的位数:");
44intsize=t();
45
46printNarNumber(size);
47}
48}
Java实现求n位数⾃幂数
代码测试结果
1defisNarNumber(num,n):
2'''⽤于判断⼀个数是否位⼀个⾃幂数'''
3strNum=str(num)
4sum=0
5foriinstrNum:
6sum=sum+pow(int(i),n)
7returnTrueifsum==numelFal
8
9defprintNarNumber(n):
10'''⽤于n位数的⾃幂数'''
11total=0
12foriinrange(pow(10,n-1),pow(10,n)):
13ifisNarNumber(i,n):
14print("%d是⾃幂数。"%i)
15total+=1
16print("%d位的⾃幂数有%d个。"%(n,total))
17
18n=int(input("请输⼊⾃幂数的位数:"))
19
20printNarNumber(n)
Python实现求n位⾃幂数
代码测试结果:
由于本⼈的电脑配置有点差,最多只测试了9位数的⾃幂数(Java和Python运⾏了20多分钟才运⾏完,10位数测了2个⼩时还没打印出⼀个
就关闭程序了),想知道10位及以上位数的⾃幂数请⾃⾏测试。
推荐⽤C语⾔代码进⾏测试,执⾏速度⽐Java和Python快很多,虚拟机上测试9位数不到4分钟就出结果了。
本文发布于:2022-11-14 01:43:41,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/14641.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |