uva202 循环小数
2017-01-23 11:31
288 查看
题目描述:输入整数a和b,输出a/b的循环小数表示及循环节长度。
例如:
Sample Input
76 25
5 43
1 397
Sample Output
76/25 = 3.04(0)
1 = number of digits in repeating cycle
5/43 = 0.(116279069767441860465)
21 = number of digits in repeating cycle
1/397 = 0.(00251889168765743073047858942065491183879093198992…)
99 = number of digits in repeating cycle
分析:
其实就想小学生做除法一样,只需要每次取余再用余数×10就可以了,然后再每次取整,其中把所有的小数都保存下来,然后记录循环的起始位置和结束位置,只要其中两次的余数相同,那么就开始循环了。
代码如下:
例如:
Sample Input
76 25
5 43
1 397
Sample Output
76/25 = 3.04(0)
1 = number of digits in repeating cycle
5/43 = 0.(116279069767441860465)
21 = number of digits in repeating cycle
1/397 = 0.(00251889168765743073047858942065491183879093198992…)
99 = number of digits in repeating cycle
分析:
其实就想小学生做除法一样,只需要每次取余再用余数×10就可以了,然后再每次取整,其中把所有的小数都保存下来,然后记录循环的起始位置和结束位置,只要其中两次的余数相同,那么就开始循环了。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int a,b,a0,ans[40000]={0},len,str[40000]={0},place[4000]={0}; while(scanf("%d%d",&a,&b)!=EOF) { a0=a;//先把a保存起来 int t; memset(ans,0,sizeof(ans)); memset(str,0,sizeof(str)); memset(place,0,sizeof(place)); a=a%b;//第一次的余数 int k=0,remain; int p; str[a]++; place[a]=0; while(1) { a=a*10; ans[k]=a/b;//把小数部分保存下来 remain=a%b; k++; if(str[remain]==0)//判断余数是否出现过 { a=remain; place[remain]=k; str[remain]++; } else//如果出现过,那么下面开始循环从上次的余数开始到此次为一个周期,下面开始以这个为周期开始循环 { t=place[remain];//记录上次出现的位置 len=k-t;//记录长度 p=k; break; } } if(len<50) { printf("%d/%d = %d.",a0,b,a0/b); int i; for(i=0;i<t;i++)//输出不是循环的部分 printf("%d",ans[i]); printf("("); for(i=t;i<k;i++)//输出循环的部分 printf("%d",ans[i]); printf(")\n"); printf(" %d = number of digits in repeating cycle\n",len); } else { printf("%d/%d = %d.",a0,b,a0/b); int i; for(i=0;i<t;i++) printf("%d",ans[i]); printf("("); for(i=t;i<50;i++) printf("%d",ans[i]); printf("...)\n"); printf(" %d = number of digits in repeating cycle\n",len); } printf("\n"); } return 0; }
相关文章推荐
- (WA) 求改..UVa202 Repeating Decimals 循环小数 紫书习题3-8
- UVA202 - Repeating Decimals(循环小数循环节)
- UVA 202 - Repeating Decimals(循环小数循环节)
- 循环小数 UVa202
- 2018.2.28【 UVa - 202 】解题报告(紫书练习题,循环小数,输出格式)
- uva 202求循环小数
- UVA-3.8-循环小数-202
- UVA 202 有理数化为循环小数求循环节 UVA 11809 对数处理数据
- UVA 202 - Repeating Decimals【循环小数循环节】
- UVA 202 循环小数
- UVA 202 循环小数
- uva202循环小数Repeating Decimals
- UVa 202 Repeating Decimals(循环小数)
- 循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)
- 习题3-8 循环小数 UVa202
- UVa202 ACM/ICPC 1990 循环小数
- 循环小数(uva-202)
- UVA202循环小数Repeating Decimals
- UVa202-Repeating Decimals-循环小数-字符串、模拟
- uva 202 - Repeating Decimals(循环小数)