米脂县 龙南县 双峰县 来安县 遵义县 景洪市 察雅县 甘泉县 黄平县 贵定县 天长市 西畴县 哈尔滨市 塘沽区 鲁山县 太谷县

变形记_趣味算法--自幂数

标签:倒箧倾囊 曲靖麻将

自幂数

自幂数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身(例如:1夜天子_2018年最新新闻网^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 <stdio.h>
 2 
 3 //自定义my_pow函数,C语言自带的pow函数返回值为double类型
 4 //转long类型精度会缺失。
 5 long my_pow(int a, int n)
 6 {
 7     long result = 1;
 8     int i = 0;
 9     for (i; i医妃独步天下_2018年最新新闻网 < n; i++)
10         result *= a;
11 
12     return result;
13 }
14 
15 // 判断是否为水仙花数
16 int isNarNum(long int num, int n)
17 {
18     long int number = num;
19     long int arry[n-1];
20     long int result = 0;
21     
22     int i;
23     //获取各个位数,并求n次幂之和
24     for (i = n-1; i >= 0; i--)
25     {
26         arry[i] = number%10;
27         numbe浙江大学_2018年最新新闻网r /= 10;
28         result += (long int)my_pow(arry[i], n);
29     }
30 
31     return result == num ? 1 : 0;
32 }
33 
34 // 打印n位的水仙花数
35 void printNarNum(int n)
36 {
37     long start = my_pow(10, n-1);   //n位数的起始位数
38     int count = 0;  //用于统计有多少个自幂数
39     long num = 0;
40     //打印自幂数
41     for ( num = start; num < start*10; num++)
42     {   //如果是自幂数则打印
43         if (isNarNum(num, n))
44         {
45             printf("%ld 是自幂数。", num);
46             count++;
47         }
48     }
49     printf("%d 位的自幂数有 %d 个。", n, count);
50 }
51 
52 int main(void)
53 {
54     int n = 0;
55     printf("请输入求几位数的自幂数:");
56     scanf("%d", &n);
57 
58     printNarNum(n);
59 
60     return 0;
61 }
C语言实现求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         long sum = 0;    //用于存储每个位上的数字的 n 次幂之和
14         
15中国银行外汇牌价_2018年最新新闻网         /*获取num的各个位的数*/
16         for (int i = n-1; i >= 0; i--) {
17             arry[i] = num%10;
18             sum += Math.pow(arry[i], n);
19             num /= 10;
20         }
21         
22         return sum == tag ? true : false;
23     }
24     
25     /**
26      * 打印自幂数方法。
27      * @param n 打印n位数的自幂数。
28      */
29     public static void printNarNumber(int n) {
30         long num = (long) Math.pow(10, n-1);    //n位数开始数字
31         int total = 0;   //用于统计n位水仙花数的个数 
32         /*打印自幂数*/
33         for (long i = num; i < num*10; i++) {
34             if (isNarNumber(i, n)) {
35                 System.out.北京师范大学_2018年最新新闻网println(i + " 是自幂数。");
36                 total++;
37             }
38         }
39         System.out.println(n + "位的自幂数有:"+ total + " 个");
40     }
41     
42     public static void main(String[] args) {
43         Scanner input = new Scanner(System.in);
44         System.out.println("请输入自幂数的位数:");
45         int size = input.nextInt();
46         
47         printNarNumber(size);
48     }
49 }
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百度影音_2018年最新新闻网)
16             total += 1
17     print("%d 位的自幂数有 %d 个。" %(n, total))        
18 
19 n = int(input("请输入自幂数的位数:"))
20 printNarNumber(n)
Python实现求n位自幂数

代码测试结果:

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

推荐用C语言代码进行测试,执行速度比Java和Python快很多,虚拟机上测试9位数不到4分钟就出结果了。如果用C语言测试10位及以上的自幂数,建议请将long类型转换成long long类型。

当前文章:http://8tbxw41-douweide-com.diegovernment.cn/5k77t/d3506_158656.html

发布时间:2019-10-17 18:02:47

银河优越会会员申请2名男子酒后滋扰游客 三亚民警抓获1人  www.7163.com澳门银河  银河娱乐首页yh163am.com  澳门银河官网手机app  银河娱乐手机版yh163am.com中国女留学生在西班牙被辱骂攻击,多次反抗无效  银河优越会会员申请缅甸帕敢矿区再发山体滑坡 已致至少12人死亡  澳门银河手机网站俄罗斯红场5月4日至9日将关闭参观  澳门银河www66356com  澳门银河娱乐yh163am.com  澳门银河娱乐yh163am.com  

关于2018年最新新闻网 | 2018年最新新闻网动态 | 联系我们 | 法律声明 | 2018年最新新闻网员工 | 2018年最新新闻网邮箱 | 网站地图

2018年最新新闻网版权所有