习题3-8 循环小数 UVa202
2014-06-25 22:53
232 查看
1.题目描述:点击打开链接
2.解题思路:先计算小数点后到m位,m应尽可能大;由于周期不会超过分母,故一个个的枚举周期即可,注意周期是否大于50时要单独处理
3.代码:
2.解题思路:先计算小数点后到m位,m应尽可能大;由于周期不会超过分母,故一个个的枚举周期即可,注意周期是否大于50时要单独处理
3.代码:
#include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> #define max 7000 int arr[max]; int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int a, b; while (scanf("%d %d", &a, &b) == 2) { memset(arr, 0, sizeof(arr)); int x = floor((double)a / b); printf("%d/%d = %d.", a, b, x); int m = a%b; int i, period = 0; for (int k = 0; k < 7000; k++)//计算小数点后7000位 { m *= 10; arr[k] = m / b; m = m%b; } for (i = 0;; i++) { int ok1 = 1, ok2, l; for (l = 1; l <= b; l++)//枚举周期 { ok2 = 1; int len = 7000 - i; for (int j = 0; j < len; j++) if (arr[j + i] != arr[j % l + i])//判断是不是周期 { ok2 = 0; break; } if (ok2) { period = l; break; } } if (!period) ok1 = 0; if (ok1) { printf("("); if (period <= 50) for (int j = i; j < i + period; j++) printf("%d", arr[j]); else { for (int j = i; j < i + 50; j++) printf("%d", arr[j]); printf("..."); } printf(")\n"); printf(" %d = number of digits in repeating cycle\n\n", period); break; } else printf("%d", arr[i]); } } return 0; }
相关文章推荐
- 算法竞赛入门经典(第2版)习题3-8 循环小数 Repeating Decimals UVa202
- (WA) 求改..UVa202 Repeating Decimals 循环小数 紫书习题3-8
- 习题 3-8 循环小数 Repeating Decimals UVa 202
- 循环小数 uva202
- UVA 202 - Repeating Decimals【循环小数循环节】
- UVA 202 循环小数
- UVA 202 循环小数
- uva 202求循环小数
- 2018.2.28【 UVa - 202 】解题报告(紫书练习题,循环小数,输出格式)
- 循环小数 UVa202
- UVA202 - Repeating Decimals(循环小数循环节)
- UVa202-Repeating Decimals-循环小数-字符串、模拟
- UVA 202 - Repeating Decimals(循环小数循环节)
- UVA 202 有理数化为循环小数求循环节 UVA 11809 对数处理数据
- UVa 202 Repeating Decimals(循环小数)
- 循环小数(uva-202)
- UVA-3.8-循环小数-202
- UVA 202 循环小数
- 题解:循环小数(UVa 202)
- uva202循环小数Repeating Decimals