水仙花数与兰德尔数
来源:互联网 发布:中南大学大数据专业 编辑:程序博客网 时间:2024/06/11 23:57
兰德尔数(Randle)数又称 自方幂数 ,是一类涉及自身特点的一类整数;
最简单的兰德尔数:三位称水仙花数,四位称玫瑰花数,五位称五角星数,六位称六合数 等……
从搜索水仙花数开始,进而探索一般n位兰德尔数;
水仙花数
一个三位数如果等于它的三个数字的立方和,该三位数称为水仙花数;
探求所有的水仙花数;
1.说明:
在处理整数的程序运行中,常用 组合 与 分解 这两种基本方式来设计求解;
2.程序设计:
- 基于 分解 的程序设计;
设置 m(100~999)循环枚举所有的三位数,把 m 分解出三个数字a、b、c,然后检验 m 是否等于a、b、c的立方和;
如果相等,则打印输出;
#include<stdio.h>int main(){ int m,a,b,c; for(m=100;m<=999;m++) { a=m/100; /*把m分解为三个数字*/ b=(m/10)%10; c=m%10; if(m==a*a*a+b*b*b+c*c*c)/*检验是否满足条件*/ printf(" %d",m); }}
- 基于 组合 的程序设计;
设置a(1~9)、b(0~9)、c(0~9)三重循环对应枚举 百位、十位、个位 三个数字,由a,b,c组合为三位数 m 后检验 m 是否等于a、b、c的立方和;
#include<stdio.h>int main(){ int m,a,b,c; for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) { m=a*100+b*10+c; if(m==a*a*a+b*b*b+c*c*c)/*检验是否满足条件*/ printf(" %d",m); }}
3.程序运行示例及其注意事项:
153 370 371 407
注意:
- 前者基于分解,把三位数 m 分解为三个数字a、b、c;
- 后者基于组合,把三个数字a、b、c组合为三位数 m ;
n位兰德尔数
兰德尔数: 一个n(n>=3)位正整数如果等于它的n个数字的n次幂之和,该数称为n位兰德尔(Randle)数,又称为自幂方数 。
试探索指定的n(3<=n<=9)位兰德尔数;
1.说明:
- 循环枚举 n位整数y,循环分离 其n个数字k;
- 为求n位数y的n个数字k的n次幂方数,相关n位数t,y,f及k均设置为double型,这样数字k的n次幂即为 pow(k,n);
- s+=pow(k,n)即为y的n个数字的n次幂之和;重点内容
- 检测y=s即可打印输出n位兰德尔数;
2.程序设计:
- 基于 分解 的程序设计;
1)、pow() 函数:
头文件:#include < math.h >
其原型为:double pow(double x, double y)
作用:pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = x^y
2)、fmod函数:
头文件:#include < math.h >
其原型为:double fmod (double x,double y)
作用:设返回值为 ret,那么 ret= x-n * y,其中 n 是整数,ret 和 x 有相同的符号,而且 ret 的绝对值小于 y 的绝对值
3)、floor函数:
头文件:#include < math.h >
其原型为:double floor( double x )
作用:函数返回参数不大于x的最大整数“向下取整”或者说“向下舍入”
#include<stdio.h>#include<math.h>int main(){ int m,n,i; double f,k,s,t,y; printf("请输入位数n(2<n<10):"); scanf("%d",&n); m=0; t=1; for(i=1;i<=n-1;i++) t=t*10; for(y=t+1;y<=t*10-1;y++) /*枚举n位整数*/ { f=y; for(s=0,i=1;i<=n;i++) /*循环分离y的n个数字k*/ { k=fmod(f,10); s+=pow(k,n); f=floor(f/10); } if(y==s) /*检验是否满足条件*/ { m++; printf(" %.0f",y); } } printf("\n%d位的兰德尔数共%d个。\n",n,m);}
3.程序运行示例及其注意事项:
请输入位数n(2<n<10):7 1741725 4210818 9800817 99263157位的兰德尔数共4个。
注意:程序枚举时间复杂度O(10^n),当n>7时运行搜索时间会比较长。
- 水仙花数与兰德尔数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 水仙花数
- 如何用VS2015手撕白菜
- 【算法导论】笔记一(插入排序、归并排序、选择排序、Peek Finding、加法器、中英文字符串搜索)
- keyListener用的健值表,保留一份
- 纯CSS3手里剑模型动画绘制
- Qt中的QSS Subcontrol
- 水仙花数与兰德尔数
- 快速上手Gobject
- 边框布局管理器(BorderLayout) 流式布局管理器(FlowLayout) 表格布局管理器(GridLayout) 卡片布局管理器(CardLayout)
- [bigdata-004]CDH Impala的应用场景
- 常见Layout的LayoutParams总结
- springmvc
- ConfigParser模块教程
- 【Spring】装配Bean 组件扫描
- 画图小程序