循环小数的循环节问题
来源:互联网 发布:a神 淘宝店 编辑:程序博客网 时间:2024/05/17 05:02
题目链接:https://www.bnuoj.com/v3/external/2/202.pdf
/*通过模拟手算竖式的过程,可以发现如果同一个余数在竖式中出现两次,那么小数就开始循环了,循环节的始末位置与这个余数出现在竖式中的位置有关这里就不详细给出分析过程了,网上可以找到详细的解题过程*/#include <cstdio>#include <cstring>const int maxn = 3010;//数组d用来存放商,数组m用来存放余数,book[k]统计余数k出现的次数int d[maxn], m[maxn], book[maxn];int main(){ int a, b; while (scanf("%d %d", &a, &b) == 2) { //head,tail用来锁定循环节的始末位置 int len, head, tail; memset(book, 0, sizeof(book)); d[0] = a / b; m[0] = a % b; book[m[0]]++; int i; //余数重复出现,说明出现循环节,跳出循环 for (i = 0; book[m[i]] < 2; i++) { int tem = m[i] * 10; d[i+1] = tem / b; m[i+1] = tem % b; book[m[i+1]]++; //统计余数出现的次数 } tail = i; //找到循环节长度 for (head = 0; m[head] != m[tail]; head++) ; len = tail - head; //输出部分 printf("%d/%d = %d.", a, b, d[0]); if (len <= 50) { for (int k = 1; k <= head; k++) printf("%d", d[k]); printf("("); for (int k = head + 1; k <= tail; k++) printf("%d", d[k]); printf(")\n"); } else { for (int k = 1; k <= head; k++) printf("%d", d[k]); printf("("); for (int k = head + 1; k <= head + 50; k++) printf("%d", d[k]); printf("...)\n"); } printf(" %d = number of digits in repeating cycle\n\n", len); } return 0;}
0 0
- 循环小数的循环节问题
- 无限循环小数的循环节
- 求无限循环小数的循环节长度
- 循环小数找出循环节
- [51Nod 1035 最长的循环节] 循环小数的性质
- 笔试题——输出循环小数的循环节
- python再计算无限循环小数的循环节
- UVA 202 - Repeating Decimals【循环小数循环节】
- 循环小数问题
- 循环小数问题
- 输出1/n的小数位,是循环小数输出一个循环节
- UVA 202 - Repeating Decimals(循环小数循环节)
- 求除以3后结果为以3为循环节的纯循环小数的连续正整数的程序!
- 循环小数的处理
- 关于循环小数的处理
- java 求无限循环小数的循环体/循环部分 project euler problem26
- UVa 202 循环小数节
- 循环小数
- 40. Combination Sum II
- 【Java多线程与并发库】18.java线程面试题1
- 关于jdbc的数据库驱动类DriverManager.getConnection()参数
- POJ 1426Find The Multiple(DFS)
- this指针
- 循环小数的循环节问题
- JQ实现多二级联动菜单的实现
- 微信六大接收接口(接收普通消息)
- RemoteCallbackList的使用
- ucos-ii学习笔记——消息队列的原理及使用
- 安装greenplum时遇到的一些问题
- 数据结构实验之图论七:驴友计划
- 关于服务器性能的一些思考
- 给定一个大写字母,要求用小写字母输出。