IT虾米网

趣味算法--自幂数详解

admin 2018年05月30日 编程语言 218 0

自幂数

自幂数是指一个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位及以上位数的自幂数请自行测试。

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

javascript 正则表达式之分组与前瞻匹配详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。