快速寻找9位数内的自幂数
首先了解自幂数的定义,自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。(例如:当n为3时,有1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153,153即是n为3时的一个自幂数)
自幂数包括:独身数、水仙花数、四叶玫瑰数、五角星数、六合数、北斗七星数、八仙数、九九重阳数、十全十美数。
先介绍基本的方法,代码如下:
#include <stdio.h>
#include <time.h>
#include <math.h>#include "Nmec.h"boolean isSelfPower(int num);
int intLen(int num);boolean isSelfPower(int num) {int n;int len;int sum = 0;len = intLen(num);for (n = num; n; n /= 10) {sum += pow(n % 10, len);}return num == sum;
}int intLen(int num) {int cnt = 0;while(num) {cnt++;num /= 10;}return cnt;
}int main() {int maxNum;int i;long startTime;long endTime;long deltaTime;printf("请输入数值范围:");scanf("%d", &maxNum);startTime = clock();for (i = 0; i < maxNum; i++) {if (isSelfPower(i)) {printf("%d是自幂数\n", i);}}endTime = clock();deltaTime = endTime - startTime;printf("耗时:%ld.%03lds", deltaTime / CLOCKS_PER_SEC, deltaTime % CLOCKS_PER_SEC);return 0;
}
代码中的头文件 **“Nmec.h”**内容如下:
#ifndef _NMEC_H_
#define _NMEC_H_typedef unsigned char boolean;#define TRUE 1
#define FALSE 0
#define NOT_FOUND -1#endif
按照这个方法寻找9位数内的自幂数, 所需时间很长,等了6分钟就没在等。 下面介绍一种可以在一分半内找出9位数内的自幂数,话不多说放代码:
#include <stdio.h>
#include <time.h>#include "Nmec.h"const int array[][10] = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,0, 1, 2*2, 3*3, 4*4, 5*5, 6*6, 7*7, 8*8, 9*9,0, 1, 2*2*2, 3*3*3, 4*4*4, 5*5*5, 6*6*6, 7*7*7, 8*8*8, 9*9*9,0, 1, 2*2*2*2, 3*3*3*3, 4*4*4*4, 5*5*5*5, 6*6*6*6, 7*7*7*7, 8*8*8*8, 9*9*9*9,0, 1, 2*2*2*2*2, 3*3*3*3*3, 4*4*4*4*4, 5*5*5*5*5, 6*6*6*6*6, 7*7*7*7*7, 8*8*8*8*8, 9*9*9*9*9,0, 1, 2*2*2*2*2*2, 3*3*3*3*3*3, 4*4*4*4*4*4, 5*5*5*5*5*5, 6*6*6*6*6*6, 7*7*7*7*7*7, 8*8*8*8*8*8, 9*9*9*9*9*9,0, 1, 2*2*2*2*2*2*2, 3*3*3*3*3*3*3, 4*4*4*4*4*4*4, 5*5*5*5*5*5*5, 6*6*6*6*6*6*6, 7*7*7*7*7*7*7, 8*8*8*8*8*8*8, 9*9*9*9*9*9*9,0, 1, 2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9,0, 1, 2*2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9*9,
};boolean isSelfPower(int num);
int intLen(int num);
int numPower(int a, int p);boolean isSelfPower(int num) {int n;int len;int sum = 0;len = intLen(num);for (n = num; n; n /= 10) {sum += numPower(n % 10, len); }return num == sum;
}int intLen(int num) {if (num < 0) {return 0;}if (num >= 100000000 && num <= 999999999) {return 9;}if (num >= 10000000 && num <= 99999999) {return 8;}if (num >= 1000000 && num <= 9999999) {return 7;}if (num >= 100000 && num <= 999999) {return 6;}if (num >= 10000 && num <= 99999) {return 5;}if (num >= 1000 && num <= 9999) {return 4;}if (num >= 100 && num <= 999) {return 3;}if (num >= 10 && num <= 99) {return 2;}return 1;
}int numPower(int a, int p) {return array[p][a];
}int main() {int maxNum;int i;long startTime;long endTime;long deltaTime;printf("请输入数值范围:");scanf("%d", &maxNum);startTime = clock();for (i = 0; i < maxNum; i++) {if (isSelfPower(i)) {printf("%d是自幂数\n", i);}}endTime = clock();deltaTime = endTime - startTime;printf("耗时:%ld.%03lds", deltaTime / CLOCKS_PER_SEC, deltaTime % CLOCKS_PER_SEC);return 0;
}
第二种方法程序运行结果如下:
由此可见,第二种方法出结果速度明显加快。对于比较好的机子,可以将时间控制在一分半内。
至此,我的第一篇博文就此问世,在此感谢教主的教诲。
快速寻找9位数内的自幂数相关推荐
- 编程之美2.12 快速寻找满足条件的两个数
这道题目的意思是,在一个数组中寻找两个数,使这两个数的和等于给定的数(找到任意一组就可以了). 题目读完之后,感觉这道题目还是很简单的,就是遍历数组呗,走两遍,即可以在O(n2)时间复 ...
- python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...
- java求六位数以内所有自幂数
如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数. 以下用java语言求六位数以内所有自幂数. 独身数共有9个: 1,2,3,4,5,6,7,8,9; 水仙花 ...
- 快速寻找勾股数算法的实现和优化
快速寻找勾股数算法的实现和优化 深夜隔壁寝室的老哥来访,说他用python实现的寻找2000以内勾股数的算法跑了20秒钟.邀请我一起讨论优化思路,完成后记录如下: 朴素探数法寻找勾股数 首先实现那个需 ...
- 【网络爬虫教学】一分钟带你快速寻找JS加密入口(二)
Hi,大家好,欢迎大家参阅由IT猫之家精心制作的JS实战系列教学课程,我是作者叮当猫,在上期教学中,我们学习了如何快速分析基于Header授权加密协议,同时我们也初次接触到了钩子(hook)的概念,钩 ...
- opencv python3 找图片不同_如何使用OpenCV快速寻找定位图像差异
原标题:如何使用OpenCV快速寻找定位图像差异 如何使用结构相似性指数(SSIM)将两个图像与Python进行比较. 使用这种方法,我们能够轻松确定两个图像是否相同或由于轻微的图像处理,压缩伪像或有 ...
- 第2章 数字之魅——快速寻找满足条件的两个数
快速寻找满足条件的两个数 问题描述 能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字,为了简化起见,我们假设这个数组中肯定存在这样一组或以上符合要求的解. 分析与解法 [解法一] ...
- LeetCode:Find Peak Element - 寻找一个数组内的顶点
2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Find Peak Element(寻找一个数组内的顶点) 2.题目地址 https://leetcode.co ...
- 学习逆向知识之用于游戏外挂的实现.第二讲,快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别...
通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别 一丶静态基址. 动态基址. 基址的区别 通过上一讲超级马里奥的游戏外挂技术制作.我们学习到了静态基址.以及观看内 ...
最新文章
- React+Redux开发实录(一)搭建工程脚手架
- 可视化深度学习模型的训练误差和验证误差
- Docker系列 二. Docker 安装 Nginx
- ERP实施需要一种态度
- pgsql的存储过程调用mysql_PostgreSQL存储过程循环调用方式
- wxWidgets:wxBitmap类用法
- 机器学习sklearn的快速使用--周振洋
- c++获取子类窗口句柄位置_干货分享:用一百行代码做一个C/C++表白小程序,程序员的浪漫!...
- java调用MySQL脚本_Java调用SQL脚本执行常用的方法示例
- iPhone 12主板曝光:布局更紧凑 满满苹果基因
- 800名员工被隔离,韩国半导体巨头紧急回应:工厂运营不受影响
- 卡尔曼滤波—建立状态空间表达式
- 矩池云上安装chumpy失败
- 【免费】某平台3980元大数据课程免费下载,仅此1次
- 工程项目利用AutoMake生成Makefile实战
- 中级软件评测师考什么
- 专业测评:5款热门的免费报表软件
- 高德地图根据经纬度获取详细地址
- 计算机型号win7,win7cpu型号怎么看
- 单位局域网连接的计算机太多,解决交换机端口不匹配导致局域网连接缓慢-ARP经验...
热门文章
- java class加载_Java 类加载
- 是不是顺子【C语言保姆级讲解】
- CCS问题:Texas Instruments XDS100v2 USB Emulator_0/C28xx : Target must be connected before loading prog
- html页面漏斗图,漏斗图的详细解读
- 数字工厂生产监控可视化决策平台,打造智能制造新时代
- 1718 Cos的多项式
- 秒杀springboot——未来轻量级高性能的Java云原生微服务框架来啦
- 十大老牌黑客之:米特尼克
- LCD(一) TFT液晶时序图
- 知领·报告 | 车路协同技术发展态势分析报告.md