I00025 寻找循环数
这个程序为《数学之美系列程序》之一。
这个问题是:找出所有n位数中的循环数。
一个n位数中的循环数是指该数乘以1到n之后,每位数字顺序发生移位,可以是移动若干位。
例如:142857是一个6位数的循环数,满足以下条件:
142857*1=142857
142857*2=285714
142857*3=428571
142857*4=571428
142857*5=714285
142857*6=857142
经过试算,这样的数并不好找,1到6位数中只有这一个。
给出的程序是按照自顶向下逐步细化的编程方法编写的顺序程序。对于程序员来说这样的编程训练是必要的,毕竟编写顺序程序是常有的事情。
程序如下:
/* 找出所有n位数中的循环数,该数乘以1到n的数后,每位数字顺序发生移位,可以是移动若干位。** 例如:142857是一个6位数的循环数,满足以下条件:* 142857*1=142857* 142857*2=285714* 142857*3=428571* 142857*4=571428* 142857*5=714285* 142857*6=857142**/#include <stdio.h>// 判定n位数v乘以r是否为循环数,变量gethighdigit用于获取v的最高位
int isCycle(int v, int n, int r, int gethighdigit)
{int t, i, highdigit;t = v * r;// 乘积有进位则不是循环数if(t / gethighdigit / 10 > 0)return 0;// 把最高位循环移位到最低位for(i=1; i<=n; i++) {// 取出最高位highdigit = t / gethighdigit;// 计算循环移位结果t = t % gethighdigit * 10 + highdigit;// 循环移位后,某个数是原数的循环移位结果,则该数乘以r为循环数if(t == v)return 1;}// 所有的循环移位都不是循环数,则原数不是循环数return 0;
}// 判定n位数v是否为循环数
int isCycleNumber(int v, int n)
{int i, gethighdigit=1;// 计算用于取最高位的数for(i=1; i<n; i++)gethighdigit *= 10;// 乘以2到n的数,有一个不是循环数则该数不是循环数for(i=2; i<=n; i++)if(!isCycle(v, n, i, gethighdigit))return 0;// 乘以2到n的数,都是循环数,则该数是循环数return 1;
}int main(void)
{int n, start=1, end=9, i, j;// 输入nscanf("%d", &n);// 计算n位数的最小值start和最大值endfor(i=1; i<n; i++) {start *= 10;end *= 10;end += 9;}// 对所有的n位数,判定该数是否为循环数,若为循环数则输出for(i=start; i<=end; i++)if(isCycleNumber(i, n)) {printf("%d\n", i);for(j=1; j<=n; j++)printf("%d*%d=%d\n", i, j, i*j);}return 0;
}
输入6时,程序执行结果如下:
6
142857
142857*1=142857
142857*2=285714
142857*3=428571
142857*4=571428
142857*5=714285
142857*6=857142
I00025 寻找循环数相关推荐
- 《程序设计技术》课程辅助学习资料
本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...
- 趣味程序之数学之美系列
数学之美系列程序一览如下,点击进入博客文章: I00001 杨辉三角 I00003 贝尔三角形 I00004 贝尔三角形(解法二) I00020 计算卡特兰数函数 I00025 寻找循环数 I0002 ...
- Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)
1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...
- 寻找一个字符串的重复子串 后缀数组
什么是后缀数组 令字符串 S=S[1]S[2]...S[n]S=S[1]S[2]...S[n]{\displaystyle S=S[1]S[2]...S[n]} , S[i,j]S[i,j]{\dis ...
- LeetCode简单题之寻找比目标字母大的最小字母
题目 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时,字母是依序循环出现的.举个例子 ...
- 交换机应用寻找10个完美的因素
交换机应用寻找10个完美的因素 10 factors for finding the perfect switch for your application 选择开关的过程并不总是值得注意的.考虑到大 ...
- 寻找汽车连接的解决方案
寻找汽车连接的解决方案 Finding solutions for automotive vehicle connectivity 汽车制造商正在增加完全依赖于连通性的功能,汽车也开始联网.这是件好事 ...
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(二)寻找物体的凸包
8.2 寻找物体的凸包 8.2.1 概念 1.给定二维平面上的点集,将最外层点连接起来构成的凸多边形. 2.理解物体形状或轮廓的一种比较有用的方法是计算一个物体的凸包,然后计算其凸缺陷(convexi ...
- 数据存储方式_寻找要操作数据的存储地址的过程称为寻址,几种寻址的方式分享...
单片机工作时,在程序指令的控制下,对数据进行各种操作(如存取数据.对数据进行运算等),然后输出控制信号.指令要对数据进行操作,必须先找到操作的数据,数据存放在存储器中,只有找到要操作数据的存储地址,才 ...
最新文章
- Linux简单的颜色设置
- 《战狼2》电影观后感
- mysql截取最后一个斜杠_在MySQL中最后一个斜杠之后选择文本?
- python画方波_python实现周期方波信号频谱图
- Codeforces 895 B XK Segments 思维 二分
- [jQuery] 按比例缩小图片
- 发票ocr识别查验解决方案
- UVALive - 3713 Astronauts(2-SAT)
- android系统性能优化工具,十条Android系统优化技巧, 让手机更流畅
- Java源文件命名规则
- 鼠标能动但是无法点击屏幕(间歇性)
- 【css】图片的内容阴影处理
- MyBatis配置加密, 解密
- 关于focusableInTouchMode不生效的问题
- windows7隐藏桌面计算机,win7小技巧之隐藏桌面图标
- Mac 下用Homebrew安装Go
- 网站优化---页面静态化技术
- awk、cut、sort和uniq
- 多色柱状图用不同柱体颜色反映数据的差异
- php新闻增删改查操作
热门文章
- 使用ZeroBrane Studio调试OpenResty Lua脚本
- 使用AIR中的File对象
- 可扩展多线程异步Socket服务器框架EMTASS 2.0
- php分页显示数据表格显示,php+layui数据表格实现数据分页渲染代码
- arcgis支持python3吗_常见问题解答:ArcGIS 中使用的 Python 是什么版本?
- jmeter校验结果_Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
- 实现一个36进制的加法0-9,a-z
- 优化C/C++代码的小技巧
- 20130912计划
- 同一html页面手机pc不同显示,Nginx根据手机端与电脑端设备相同地址显示不同页面内容...