HDU1717--小数化分数2
这道题是将输入的小数(有可能是无限循环小数)来化为分数。刚開始看到以为枚举(千万不要嘲笑我),可是感觉不正确。
所以百度了小数化为分数的方法,然后看到了各种方法,原来是这这样,在这我採用的是小数化为分数的套公式法
纯循环
看过上面的认为大家就知道怎么将各种小数转换为分数的方法了
然后就是代码实现了,假设理解了上面的方法,事实上剩下的就是字符串的处理,最后大家不要忘就是化简得到的分数就能够了,化简事实上就是求分子和分母的最大公约数,处理后进行转换就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的更多相关文章
- HDU1717小数化分数2
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- ACM学习历程—HDU1717 小数化分数2(gcd)
Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数 ...
- 【HDU】1717 小数化分数2 ——计数原理
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 1717 小数化分数2(最大公约数)
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 紫书 习题8-14 UVa 1616(二分+小数化分数+精度)
参考了https://www.cnblogs.com/dwtfukgv/p/5645446.html (1)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...
- CSU 8月月赛 Decimal 小数化分数
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 这个OJ很容易跪所以我贴一下题目 Description 任意一个分数都是有理数,对于任意一 ...
- 杭电oj1717——小数化分数(java实现)
question:小数化分数2 思路: /** * 这道题没有整数部分(有也无所谓,算小数部分,算完了分子分母按倍数加上就好),也就是说数组直接从a[2]开始后面是小数,我把这道题分为了三类: * * ...
- HDU 1717 小数化分数2 数学题
解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...
- 小数化分数的O(log2n)解法
具体约束: 给定一个小数x,x满足0<=x<1,且保证给定的x保留了18位小数 输出一个分数,使得分母不超过1e9,分子分母互质,且在满足这些条件的情况下最接近x 了解一下法雷数列和ste ...
- hdu 1905 小数化分数2
;}
随机推荐
- getLastSql()用法
getLastSql()用法 $User = M("User"); // 实例化User对象 $User->find(1); echo $User->getLastSq ...
- js&jquery避免报错的方法
CreateTime--2016年12月8日15:28:40Author:Marydonjs&jquery规避报错信息的两种方式 <script type="text/ja ...
- 〖Linux〗不知谁写的,很实用的Linux命令
第一部分 . sudo 运行上一条命令 sudo !! . HTTP方式共享当前目录 python -m SimpleHTTPServer . vim保存一个root用户文件 :w !sudo tee ...
- CallableStatement简单使用
直接上存储过程.函数 --运行不带參数但带返回值的存储过程 CREATE OR REPLACE PROCEDURE proc_getUserCount(v_totalCount OUT NUMBER) ...
- 【APP接口开发】chrome浏览器DHC工具安装使用(亲测有效)
1.DHC文件获取地址:http://chromecj.com/web-development/2015-08/549/download.html 2.chrome安装DHC插件教程和步骤:http: ...
- iOS开发-多线程编程技术(Thread、Cocoa operations、GCD)
简介 在软件开发中,多线程编程技术被广泛应用,相信多线程任务对我们来说已经不再陌生了.有了多线程技术,我们可以同做多个事情,而不是一个一个任务地进行.比如:前端和后台作交互.大任务(需要耗费一定的时间 ...
- [HNOI2002]营业额统计 Splay tree
Splay tree入门题,学好代码风格,学习HH大牛的,传送门.. #include <functional> #include <algorithm> #include & ...
- laravel 数据库查询的一些函数意义(未完)
->all() 查询数据库中的全部信息,一对象形式返回 $rows=UserModel::all(); ->get() 查询的执行函数,->toArray()将查询的是数据集转换成数 ...
- Java数据结构和算法(三):常用排序算法与经典题型
常用的八种排序算法 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中.将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列.对第四个 ...
- atitit.loading的设计与实现控件选型attilax 总结
atitit.loading的设计与实现控件选型attilax 总结 1. Percentage Loader(推荐) 1 1.1. 起始百分比::调整 progress 1 2. CSS3 Loa ...