【HDU】1717 小数化分数2 ——计数原理
小数化分数2
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2988 Accepted Submission(s): 1224
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
#include <cstdio>
#include <cstring> typedef long long ll; const int LEN = ; char num[LEN];
ll a, b, c, d, e, f; //形如a/b, c/d, e/f的分数 ll diypow(int n) //求10的n次方
{
ll ans = ;
for(int i = ; i < n; i++)
ans *= ;
return ans;
} ll gcd(ll x, ll y) //最大公约数
{
while(x != y){
if (x > y)
x -= y;
else
y -= x;
}
return x;
} void cacnum() //处理输入的数,将其有限小数部分以及无限循环部分分别用分数表示
{
a = b = c = d = ;
int len1 = , len2 = ; //len1 len2分别是有限小数部分分子的长度和无限小数循环节的长度
int len = strlen(num);
for(int i = ; i < len; i++){
if (num[i] == '('){
len2 = len - i - ;
len1 = i - ;
break;
}
if (i == len-){
len1 = i - ;
}
}
if (num[] == '(')
sscanf(num, "0.(%I64d)", &c);
else
sscanf(num, "0.%I64d(%I64d)", &a, &c); //正则表达式读入
if (len1 != )
b = diypow(len1);
if (len2 != ){
d = diypow(len2) - ;
d *= diypow(len1); //构造分母
}
} int main()
{
//freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--){
scanf("%s", num);
cacnum();
if (a != && c != ){ //如果既有有限部分又有无限部分,两个分数相加
e = a * d / b + c;
f = d;
}
else if (a == ){
e = c;
f = d;
}
else if (c == ){
e = a;
f = b;
}
ll g = gcd(e, f); //取分子分母的最大公约数用来化简
printf("%I64d/%I64d\n", e / g, f / g);
}
return ;
}
【HDU】1717 小数化分数2 ——计数原理的更多相关文章
- HDU 1717 小数化分数2(最大公约数)
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 1717 小数化分数2 数学题
解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...
- hdu 1905 小数化分数2
;}
- 【HDOJ】1717 小数化分数2
简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...
- HDU1717小数化分数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]开始后面是小数,我把这道题分为了三类: * * ...
- (小数化分数)小数化分数2 -- HDU --1717
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1717 举例: 0.24333333…………=(243-24)/900=73/3000.9545454…… ...
随机推荐
- jquery hover延时
var timer; //绑定hover事件 $(function () { $(".centercy img").hover(showPic, hid ...
- android重要的对象
Context----------------访问全局信息的api Activity Window Intent/Bundle ImageView----------onclick View----- ...
- QTDesigner的QVBoxLayout自动随窗口拉伸
在MainWindow的构造函数中添加如下代码://设置Uiui.setupUi(this); //使Ui可自适应父窗口大小QVBoxLayout* mainLayout = new QVBoxLay ...
- JavaEE Tutorials (26) - 批处理
26.1批处理介绍391 26.1.1批处理作业中的步骤391 26.1.2并行处理392 26.1.3状态和判定元素392 26.1.4批处理框架功能39326.2Java EE中的批处理394 2 ...
- cf467B Fedor and New Game
B. Fedor and New Game time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 关于CoreData的理解和使用.
CoreData是苹果官方推出的一种方便的面向对象的存储方式,相信大家都已经对其有所了解,但是对于CoreData的概念大家都存在部分的误区.给大家推荐个网址是苹果的官方文档的翻译版(http://o ...
- opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/ 原理: glPushMat ...
- Basic Concepts of Block Media Recovery
Basic Concepts of Block Media Recovery Whenever block corruption has been automatically detected, yo ...
- uiwebview 播放视频
先吐槽下 昨天为了做一个链接优酷的视频难死我了 最后找到一个解决办法 就是uiwebview 播放视频,但是问题又出来了 怎么监听视频开始播放呢??? 我从百度着了4个小时 最后无功而返 最后我 ...
- Basic Calculator,Basic Calculator II
一.Basic Calculator Total Accepted: 18480 Total Submissions: 94750 Difficulty: Medium Implement a bas ...