自幂数

自幂数是指一个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 import java.util.Scanner;
 2 
 3 public class NarNum {
 4     
 5     /**
 6      * 用于判断一个数是否是自幂数。
 7      * @param num 是需要进行自幂数判断的数。
 8      * @return 如果num是自幂数返回true,否则返回false。
 9      */
10     public static boolean isNarNumber(long num, int n) {
11         long tag = num;        //将num赋值给tag,用于结果的判断
12         long[] arry = new long[n];        //创建一个数组用于存储num的各个位
13 
14         /*获取num的各个位的数*/
15         for (int i = n-1; i >= 0; i--) {
16             arry[i] = num%10;
17             num /= 10;
18         }
19         long sum = 0;    //用于存储每个位上的数字的 n 次幂之和
20         /*每个位上的数字 n 次幂之和*/
21         for (int i = 0; i < n; i++) {
22             sum += Math.pow(arry[i], n);
23         }
24         return sum == tag ? true : false;
25     }
26     
27     /**
28      * 打印自幂数方法。
29      * @param n 打印n位数的自幂数。
30      */
31     public static void printNarNumber(int n) {
32         long num = (long) Math.pow(10, n-1);    //n位数开始数字
33         int total = 0;   //用于统计n位水仙花数的个数 
34         /*打印自幂数*/
35         for (long i = num; i < num*10; i++) {
36             if (isNarNumber(i, n)) {
37                 System.out.println(i + " 是自幂数。");
38                 total++;
39             }
40         }
41         System.out.println(n + "位的自幂数有:"+ total + " 个");
42     }
43     
44     public static void main(String[] args) {
45         Scanner input = new Scanner(System.in);
46         System.out.println("请输入自幂数的位数:");
47         int size = input.nextInt();
48         
49         printNarNumber(size);
50     }
51 }

java实现求n位自幂数

代码测试结果

 1 def isNarNumber(num):
 2     '''用于判断一个数是否位一个自幂数'''
 3     strNum = str(num)
 4     length = len(strNum)
 5     sum = 0
 6     for i in strNum:
 7         sum = sum + pow(int(i), --length)
 8     return True if sum == num else False
 9 
10 def printNarNumber(n):
11     '''用于n位数的自幂数'''
12     total = 0
13     for i in range(pow(10, n-1), pow(10, n)):
14         if isNarNumber(i):
15             print("%d 是自幂数。" %i)
16             total += 1
17     print("%d 位的自幂数有 %d 个。" %(n, total))        
18 
19 n = int(input("请输入自幂数的位数:"))
20 printNarNumber(n)

Python实现求n位自幂数

代码测试结果: 

 由于本人的电脑配置有点差,最多只测试了9位数的自幂数(运行了20多分钟才运行完,10位数测了2个小时还没打印出一个就关闭程序了),想知道10位及以上位数的自幂数请自行测试。

版权声明:本文为1-6-0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/1-6-0/p/9107684.html