Repeating Decimals UVA - 202
来源:互联网 发布:windows host配置文件 编辑:程序博客网 时间:2024/06/10 20:48
输入m和n,m为被除数,n为除数。用两个数组来存余数和循环小数(或有限小数)。
此前一直用数组b来存除法的结果,无法判断何时开始循环。也并没有思路。
其实手算一遍任意的几个数思路就会开阔一些,比如3/7,1/6,76/25等等。
当第二个循环节开始的时候,余数和之前数组b所存的某一个余数必定是相同的。
根据这一点可以初始数组b为0,令求得的余数b[m] = count,根据b[m]的值也可以计算循环节的长度
因为最后求得的m,不是0就是和第一个循环节开始时的余数是相同的,这个余数的位数——count早已被纪录下来了
当计算到余数相同时或余数为零时,跳出计算结果的循环
#include <stdio.h>#include <string.h>int a[10000];int b[10000];int main(void){ int m, n, i, j; while(scanf("%d%d", &m, &n) != EOF){ memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); a[0] = m / n; printf("%d/%d = %d.", m, n, a[0]); m = m % n; int count = 1; while(!b[m] && m){ b[m]= count; a[count++] = m * 10 / n; m = m * 10 % n; } if(m == 0){ for(i = 1; i < count; i++) printf("%d", a[i]); printf("(0)\n"); } else{ //输出循环节之前的小数 for(i = 1; i < b[m]; i++) printf("%d", a[i]); //输出循环节 printf("("); for(; i < count && i <= 50; i++) printf("%d", a[i]); if(count > 50) printf("..."); printf(")\n"); } printf(" %d",!m ? 1: count - b[m]); printf(" = number of digits in repeating cycle\n\n"); }}
0 0
- UVa 202 - Repeating Decimals
- UVa 202 - Repeating Decimals
- UVa 202 - Repeating Decimals
- UVa 202 Repeating Decimals
- Uva 202 Repeating Decimals
- UVA - 202 Repeating Decimals
- UVa 202 Repeating Decimals
- UVa-202 - Repeating Decimals
- UVa 202 Repeating Decimals
- UVa 202 Repeating Decimals
- UVA - 202 Repeating Decimals
- Uva - 202 - Repeating Decimals
- UVA - 202 Repeating Decimals
- [UVA 202]Repeating Decimals
- UVa 202 Repeating Decimals
- uva 202 Repeating Decimals
- UVa 202 - Repeating Decimals
- UVa 202, Repeating Decimals
- 25 总结
- 解决wordpress用户注册时,点击邮件中的重置密码链接提示“您的密码重设链接无效”
- 基于散列的集合简析-HashMap、HashSet、LinkedHashSet、LinkedHashMap
- 【收藏】学习资源汇总(不断更新...)
- <Oday安全 12.3.1Ret2Libc实战之利用ZwSetInformationProcess>一节注记(上)
- Repeating Decimals UVA - 202
- 路由器和交换机的区别
- 面试题-J2SE基础(一)
- c语言之辗转相除法实现十进制转换为八进制
- Java 帝国之消息队列
- 2017年试试Web组件化框架Omi
- cordova-plugin-wechat插件的使用
- 建立一个个人网站(第二弹——作为一个程序猿)
- JSP之application对象