这个程序为《数学之美系列程序》之一。

这个问题是:找出所有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 寻找循环数相关推荐

  1. 《程序设计技术》课程辅助学习资料

    本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...

  2. 趣味程序之数学之美系列

    数学之美系列程序一览如下,点击进入博客文章: I00001 杨辉三角 I00003 贝尔三角形 I00004 贝尔三角形(解法二) I00020 计算卡特兰数函数 I00025 寻找循环数 I0002 ...

  3. Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)

    1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...

  4. 寻找一个字符串的重复子串 后缀数组

    什么是后缀数组 令字符串 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 ...

  5. LeetCode简单题之寻找比目标字母大的最小字母

    题目 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时,字母是依序循环出现的.举个例子 ...

  6. 交换机应用寻找10个完美的因素

    交换机应用寻找10个完美的因素 10 factors for finding the perfect switch for your application 选择开关的过程并不总是值得注意的.考虑到大 ...

  7. 寻找汽车连接的解决方案

    寻找汽车连接的解决方案 Finding solutions for automotive vehicle connectivity 汽车制造商正在增加完全依赖于连通性的功能,汽车也开始联网.这是件好事 ...

  8. 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(二)寻找物体的凸包

    8.2 寻找物体的凸包 8.2.1 概念 1.给定二维平面上的点集,将最外层点连接起来构成的凸多边形. 2.理解物体形状或轮廓的一种比较有用的方法是计算一个物体的凸包,然后计算其凸缺陷(convexi ...

  9. 数据存储方式_寻找要操作数据的存储地址的过程称为寻址,几种寻址的方式分享...

    单片机工作时,在程序指令的控制下,对数据进行各种操作(如存取数据.对数据进行运算等),然后输出控制信号.指令要对数据进行操作,必须先找到操作的数据,数据存放在存储器中,只有找到要操作数据的存储地址,才 ...

最新文章

  1. Linux简单的颜色设置
  2. 《战狼2》电影观后感
  3. mysql截取最后一个斜杠_在MySQL中最后一个斜杠之后选择文本?
  4. python画方波_python实现周期方波信号频谱图
  5. Codeforces 895 B XK Segments 思维 二分
  6. [jQuery] 按比例缩小图片
  7. 发票ocr识别查验解决方案
  8. UVALive - 3713 Astronauts(2-SAT)
  9. android系统性能优化工具,十条Android系统优化技巧, 让手机更流畅
  10. Java源文件命名规则
  11. 鼠标能动但是无法点击屏幕(间歇性)
  12. 【css】图片的内容阴影处理
  13. MyBatis配置加密, 解密
  14. 关于focusableInTouchMode不生效的问题
  15. windows7隐藏桌面计算机,win7小技巧之隐藏桌面图标
  16. Mac 下用Homebrew安装Go
  17. 网站优化---页面静态化技术
  18. awk、cut、sort和uniq
  19. 多色柱状图用不同柱体颜色反映数据的差异
  20. php新闻增删改查操作

热门文章

  1. 使用ZeroBrane Studio调试OpenResty Lua脚本
  2. 使用AIR中的File对象
  3. 可扩展多线程异步Socket服务器框架EMTASS 2.0
  4. php分页显示数据表格显示,php+layui数据表格实现数据分页渲染代码
  5. arcgis支持python3吗_常见问题解答:ArcGIS 中使用的 Python 是什么版本?
  6. jmeter校验结果_Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
  7. 实现一个36进制的加法0-9,a-z
  8. 优化C/C++代码的小技巧
  9. 20130912计划
  10. 同一html页面手机pc不同显示,Nginx根据手机端与电脑端设备相同地址显示不同页面内容...