这道题是将输入的小数(有可能是无限循环小数)来化为分数。刚開始看到以为枚举(千万不要嘲笑我),可是感觉不正确。

所以百度了小数化为分数的方法,然后看到了各种方法,原来是这这样,在这我採用的是小数化为分数的套公式法

纯循环

用9做分母,有多少个循环数就几个9。比方0.3,3的循环就是9分之3,0.654,654的循环就是999分之654。 0.9。9的循环就是9分之9(1)。以此类推。

混循环
先来看几个样例
例:把混循环小数0.228˙化为分数:
解:0.228˙
=[(228/1000)+8/9000)]
=228/(900+100)+8/9000
=[(228/900)-(228/9000)]+(8/9000)
=(228/900)+[(8/9000)-(228/9000)]
=(228/900)-(22/900)
=(228-22)/900
=206/900
=103/450;
例:把混循环小数0.123˙68˙化成分数:
解:0.123˙68˙=(0.12368+0.00000˙68˙)
=(12368/100000)+(68/9900000)
=[(12368/99000)-(12368/990000)]+(68/9900000)
=(12368/99000)+[(68/9900000)-(12368/9900000)]
=(12368/99000)-(12300/9900000)
=(12368-123)/99000
公式
用9和0做分母。首先有几个循环节就几个9。接着有几个没增加循环的数就加几个0,再用小数点后面的数减 没增加循环的数,比方0.43,3的循环,有一位数没增加循环。就在9后面加一个0做分母,再用43减4做分子,得 90分之39,0.145,5的循环就用9后面加2个0做分母,再用145减14做分子,得900分之131,0.549,49的循环。就 用99后面加1个0做分母。用549减5做分子。最后得990分之545。以此类推,能约分的要化简。

看过上面的认为大家就知道怎么将各种小数转换为分数的方法了

然后就是代码实现了,假设理解了上面的方法,事实上剩下的就是字符串的处理,最后大家不要忘就是化简得到的分数就能够了,化简事实上就是求分子和分母的最大公约数,处理后进行转换就OK了哈。

贴一下自己的代码哈!

#include <iostream>
#include <string>
using namespace std;
//求最大公约数
int gcd(int a , int b)
{
int t;
if(a < b)
{
t = a;
a = b;
b = t;
}
while(b > 0)
{
t = b;
b = a%b;
a = t;
}
return a;
}
int main()
{
#ifdef LOCAL
freopen("input.txt" , "r" , stdin);
#endif
int T;
cin >> T;
string str;
while(T--)
{
cin >> str;
int primLength = 0 , lastLength = 0 , primValue = 0 , lastValue = 0;
bool flag = false;
int fenzi = 1 , fenmu = 1;
//处理输入的小数字符串
for(int i=2; i<str.length(); ++i)
{
//标记遇到左括号
if(str[i] == '(')
{
flag = true;
}
//遇到数字后的处理
if(str[i] >= '0' && str[i] <= '9')
{
if(flag)
{
lastLength++;
lastValue = lastValue * 10 + (str[i] - '0');
}else{
primLength++;
primValue = primValue * 10 + (str[i] - '0');
}
}
}
//对无限循环的和不循环的分别处理
if(flag)
{
int temp = primValue;
int sum = 0;
while(lastLength--)
{
temp = temp * 10;
sum = sum*10 + 9;
}
fenzi = temp + lastValue - primValue;
fenmu = sum;
while(primLength--)
{
fenmu = fenmu * 10;
}
//进行输出
cout << fenzi/gcd(fenzi , fenmu) << "/" << fenmu/gcd(fenzi , fenmu) << endl;
}else{
while(primLength--)
{
fenmu*=10;
}
//进行输出
cout << primValue/gcd(fenmu , primValue) << "/" << fenmu/gcd(fenmu , primValue) << endl;
}
}
return 0;
}


HDU1717--小数化分数2的更多相关文章

  1. HDU1717小数化分数2

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. ACM学习历程—HDU1717 小数化分数2(gcd)

    Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数 ...

  3. 【HDU】1717 小数化分数2 ——计数原理

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. HDU 1717 小数化分数2(最大公约数)

    小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  5. 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)

    参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html (1)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...

  6. CSU 8月月赛 Decimal 小数化分数

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 这个OJ很容易跪所以我贴一下题目 Description 任意一个分数都是有理数,对于任意一 ...

  7. 杭电oj1717——小数化分数(java实现)

    question:小数化分数2 思路: /** * 这道题没有整数部分(有也无所谓,算小数部分,算完了分子分母按倍数加上就好),也就是说数组直接从a[2]开始后面是小数,我把这道题分为了三类: * * ...

  8. HDU 1717 小数化分数2 数学题

    解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...

  9. 小数化分数的O(log2n)解法

    具体约束: 给定一个小数x,x满足0<=x<1,且保证给定的x保留了18位小数 输出一个分数,使得分母不超过1e9,分子分母互质,且在满足这些条件的情况下最接近x 了解一下法雷数列和ste ...

  10. hdu 1905 小数化分数2

    ;}

随机推荐

  1. HDU 5312(数学推导+技巧)

    首先说一下.N*(N-1)/2为三角形数,随意一个自然数都最多可由三个三角形数表示. 对于,对于给定的要求值 V, 那么其一组解可表示为 V = 6*(K个三角形数的和)+K: 即随意由k个数组成的解 ...

  2. java在线预览txt、word、ppt、execel,pdf代码

    在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputStream bis = null; URL url = null; HttpURLConnection ...

  3. test推荐到极客头条002

    test推荐到极客头条002test推荐到极客头条002test推荐到极客头条002test推荐到极客头条002test推荐到极客头条002test推荐到极客头条002test推荐到极客头条002te ...

  4. Java之字节码(2) - .class文件格式详解

    转载来自 小介:去 年在读<深入解析JVM>的时候写的,记得当时还想着用自己的代码解析字节码的,最后只完成了一部分.现在都不知道还有没有保留着,貌似Apache有现 成的BCEL工程可以做 ...

  5. 理解Load Average做好压力测试(转)

    转载自:http://www.blogjava.net/cenwenchu/archive/2008/06/30/211712.html SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果 ...

  6. express@4.0.*

    $ sudo npm install -g express the installation goes fine. But when I try to create a project with ex ...

  7. for循环和增强版的for循环

    增强的for循环. 缺点:   对于数组.不能方便的訪问下标值.   对于集合,与使用Interator相比.不能方便的删除集合中的内容(在内部也是调用Interator). 除了简单遍历并读取当中的 ...

  8. js 字符串拼接 html 累加 html 叠加

    正常来说已经使用es6 的 模板了如`` //页面层 layer.open({ type: 1, content:`<div class="child_card"> & ...

  9. 【iOS开发之Objective-C】书签管理器项目

    1.项目 新建一个书签管理器的项目,能够存储书签的网址.中文名.星级.訪问量和权限信息.具有增.删.改.查和排序的功能. 2.找对象,抽象类 书签管理器,书签管理器.书签管理器--  多读几次书是不是 ...

  10. 点滴积累【other】---HTTP Error 503. The service is unavailable (转载)

    此文参考来源:http://luowei1371984.blog.163.com/blog/static/440415892012726448381/ 描述:在访问网站是会遇到这样的问题,提示“HTT ...