题意:给你一个循环小数,化成分数,要求分数的分母最小。

思路:暴力搜一遍循环节

把循环小数化分数步骤:

纯循环小数化分数

纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,分母各位上的数都是9,9的个数与循环节的位数相同。能约分的要约分。

例:

混循环小数化分数

这个分数的分子是第二个循环节以前的小数部分组成的数与小数部分中不循环部分组成的数的差。分母的头几位数是9,末几位是0。9的个数与循环节中的位数相同,0的个数与不循环部分的位数相同。

例:

回到问题

将题目小数部分提取出来,从后往前搜索,后面部分作为循环部分,前面部分作为不循环部分。按上述方法求出分子分母,记录最小分母即可。

#include <cstdio>
#include <iostream>
#include <string>
#include <cmath> using namespace std; typedef long long LL; LL Gcd(LL a, LL b) {
LL t;
while (b) {
t = a % b;
a = b;
b = t;
}
return a;
} LL _stoll(string s) { // c++11 std::stoll
LL v = 0;
for (int i = 0; i < s.length(); ++i) {
v = v * 10 + s[i] - '0';
}
return v;
} int main() {
string s, sa, sb;
LL la, lb;
LL num, den, g;
LL ansd, ansn;
while (cin >> s && s.length() > 1) {
s = s.substr(2, s.length() - 5);
int n = s.length();
ansd = 0;
for (int i = 0; i < n; ++i) {
int j = n - i;
sa = s.substr(0, i);// 非循环部分
sb = s.substr(i); // 循环节部分
la = i ? _stoll(sa) : 0;
lb = _stoll(sb);
num = la * (LL)pow(10, j) + lb - la; //小数部分-非循环部分
den = ((LL)pow(10, j) - 1) * (LL)pow(10, i);//999000
g = Gcd(num, den);
num /= g;
den /= g;
if (!ansd || den < ansd) {
ansd = den;
ansn = num;
}
}
printf("%lld/%lld\n", ansn, ansd);
}
return 0;
}

POJ 1930 Dead Fraction (循环小数-GCD)的更多相关文章

  1. POJ 1930 Dead Fraction

    POJ 1930 Dead Rraction 此题是一个将无限循环小数转化为分数的题目 对于一个数 x=0.abcdefdef.... 假设其不循环部分的长度为m(如abc的长度为m),循环节的长度为 ...

  2. poj 1930 Dead Fraction(循环小数化分数)

    Dead Fraction Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3478   Accepted: 1162 Des ...

  3. UVA 10555 - Dead Fraction(数论+无限循环小数)

    UVA 10555 - Dead Fraction 题目链接 题意:给定一个循环小数,不确定循环节,求出该小数用分数表示,而且分母最小的情况 思路:推个小公式 一个小数0.aaaaabbb... 表示 ...

  4. uva 10555 - Dead Fraction)(数论)

    option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" st ...

  5. POJ 1930

    Dead Fraction Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1762   Accepted: 568 Desc ...

  6. Mathematics:Dead Fraction(POJ 1930)

    消失了的分式 题目大意:某个人在赶论文,需要把里面有些写成小数的数字化为分式,这些小数是无限循环小数(有理数),要你找对应的分母最小的那个分式(也就是从哪里开始循环并不知道). 一开始我也是蒙了,这尼 ...

  7. Dead Fraction [POJ1930]

    题意: 很有意思的一道题,,将一个无限循环小数转化成分母最小的精确分数值....,循环的部分不一定是最后一位. Sample Input 0.2... 0.20... 0.474612399... 0 ...

  8. poj1930 Dead Fraction

    思路: 循环小数化分数,枚举所有可能的循环节,取分母最小的那个. 实现: #include <iostream> #include <cstdio> #include < ...

  9. POJ 2773 Happy 2006【GCD/欧拉函数】

    根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...

随机推荐

  1. JVM锁简介:偏向锁、轻量级锁和重量级锁

    转自:https://www.aimoon.site/blog/2018/05/21/biased-locking/ 比较复杂,简略见另一篇:https://www.cnblogs.com/twohe ...

  2. git回滚远程仓库代码/错提master分支的恢复

    前言 今天周五了,刚接了个新微服务模块,下班前高高兴兴开发完,提交git代码,jenkins发布到测试环境.突然看到一个提示 我最近提的代码呢?!! 想到可能会提错仓库,转念一想,不对呀,我怎有这么高 ...

  3. C# CEF 封装UserControl

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  4. 使用fastreport以代码方式创建报表

    Report report = new Report();// register the "Products" tablereport.RegisterData(dataSet1. ...

  5. IDA Pro使用技巧

    DA Pro基本简介 IDA加载完程序后,3个立即可见的窗口分别为IDA-View,Named,和消息输出窗口(output Window). IDA图形视图会有执行流,Yes箭头默认为绿色,No箭头 ...

  6. pyqt5的安装

    第一步:需要安装:pip3 install pyqt5   安装工具:pip3 install pyqt5-tools 第二步:打开Pycharm,进入设置,添加外部工具 file-->sett ...

  7. CNN可解释

    1 http://bindog.github.io/blog/2018/02/10/model-explanation/ http://www.sohu.com/a/216216094_473283 ...

  8. fastdfs+nginx集群高可用搭建的一些坑!!记录一下

    首先我这里是三台节点,都搭tracker和storage,然后使用nginx做负载,只建一个group1,三个tracker! 搭建步骤比较麻烦,里面有很多坑需要注意,步骤就不啰嗦了,这里主要记录几个 ...

  9. 【Python】Python-基础语法学习

    基础语法学习 果然学完 C++ 后再看其他语言的确有很多的共性,只需要熟悉一下python的独特语法和 C++ 中的差异就可以写出一些小的程序,而写得过程中也再次体会出python代码的精简和灵活: ...

  10. Jquert data方法获取不到数据,显示为undefined。

    在使用jquery的data-xxxx自定义属性名使用小写 以下是我测试代码: 结果显示Undefined 现在将“data-Name”变为“data-name”,将大写的部分全部变为小写. 可以获取 ...