趣味算法--水仙花数
自幂数
自幂数是指一个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位及以上位数的自幂数请自行测试。