POJ 1930 Dead Fraction(循环小数转换成分数)
2016-04-05 21:39
423 查看
http://poj.org/problem?id=1930
这道题就是吧0.XX..的循环小数转化成分数,可能存在多个有可能的循环节,那么就选择输出分母最小的情况。
这道题就是吧0.XX..的循环小数转化成分数,可能存在多个有可能的循环节,那么就选择输出分母最小的情况。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> #include<string> #define LL unsigned long long #define INF ((LL)1<<61) using namespace std; LL Min, l, l1, l2, n1, n2, m1, m2, tmp, a, b, c, x, y; string s, rc, s1, s2; LL gcd(LL a, LL b) { if (b == 0) return a; else return gcd(b, a % b); } int main()a { while (cin >> s && s != "0") { Min = INF; l = s.size(); s.erase(l-3, 3); s.erase(0, 2); l = s.size(); for (int rcl = 1; rcl <= l; rcl++) { rc = s.substr(l-rcl, rcl); int j = 0; for (j = l-rcl*2; j >= 0; j -= rcl) { if (s.substr(j, rcl) != rc) break; } j += rcl; s1 = s.substr(0, j); l1 = s1.size(); n1 = 1; for (int i = 0; i < l1; i++) n1 *= 10; m1 = 0; for (int i = 0; i < l1; i++) { tmp = s1[i] - '0'; m1 = m1 * 10 + tmp; } s2 = rc; l2 = s2.size(); n2 = 1; for (int i = 0; i < l2; i++) n2 *= 10; m2 = 0; for (int i = 0; i < l2; i++) { tmp = s2[i] - '0'; m2 = m2 * 10 + tmp; } a = m2+m1*n2-m1; b = n1*n2-n1; c = gcd(a, b); a = a/c; b = b/c; if (b < Min) { Min = b; x = a; y = b; } } printf("%llu/%llu\n", x, y); } return 0; }
相关文章推荐
- 循序渐进之Spring AOP(1) - 原理
- 第四周作业
- Java入门:基础算法之线性搜索
- appium 获取元素方法
- 读书有感
- OnTouchListener与OnClickListener冲突问题解决思路
- JScrollPane 添加到流式布局的有多个JButton的JPanel上,如何使水平拉伸保持流式布局特点,垂直加滚动条?
- PB9写的一个拆解SQL语句的通用函数
- tq2440编译ARM版本的Qt4出错问题解决
- 汇编入门学习笔记 (七)—— dp,div,dup
- 图像分析:二值图像连通域标记2-基于轮廓的标记
- 剑指offer面试题 求数组中只出现一次的数字
- 漫谈Java虚拟机(JVM)
- Microsoft.Win32.OpenFileDialog使用例子
- PLSql--乘法口诀表
- 简单的leetcode(一)
- LightOj 1220 Fantasy of a Summation(快速幂)
- [X-Code7新功能之一]OC的泛型支持
- JScrollPane 自动跟进 自动到滚动到最底部
- Jmeter和Tsung之间的对比