小数化分数2

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2988    Accepted Submission(s): 1224

Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
 
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
 
Output
对每一个对应的小数化成最简分数后输出,占一行。
 
Sample Input
3
0.(4)
0.5
0.32(692307)
 
Sample Output
4/9
1/2
17/52
 
Source
 
Recommend
lcy   |   We have carefully selected several similar problems for you:  1715 1716 1166 1719 1722 
 
题解:首先要知道无限循环小数分数形式的构造方法:分子为最小循环节,分母为对应位数的99..9 如已知无限循环小数:0.568568……以568为循环节,那么这个小数的分数形式就是568/999,题中,我们将小数的有限部分和无限循环部分分开处理,得到两个分数,再相加化简,所得即为所求。
 
代码如下:
 #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 ——计数原理的更多相关文章

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

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

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

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

  3. hdu 1905 小数化分数2

    ;}

  4. 【HDOJ】1717 小数化分数2

    简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...

  5. HDU1717小数化分数2

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

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

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

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

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

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

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

  9. (小数化分数)小数化分数2 -- HDU --1717

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1717 举例: 0.24333333…………=(243-24)/900=73/3000.9545454…… ...

随机推荐

  1. Apache+php+mysql win7 64位安装的几个注意事项

    网上一堆安装教程,所以不赘述具体安装过程,只说注意事项.新手推荐phpstudy 如果想单个安装,那么以下是我两三年内多次在win winserver环境下配置Apache环境的一点注意事项,下载连接 ...

  2. Sql Server专题二:数据库主要对象

    存储过程 (1)减少网络通信量.调用一个行数不多的存储过程与直接调用sql语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行sql语句,那么其性能绝对比一条一条的调用sql语句要高得多. ...

  3. 检测android的版本的办法

    http://www.cnblogs.com/wzh206/archive/2010/05/02/1726076.html 如何判断Android系统的版本 随着Android版本的增多,在不同的版本 ...

  4. WMI问题终极解决

    1. 如果用JInterOp,先用这篇文章叙述的: http://m.oschina.net/blog/73163 2.另外开启这个: https://dev.c-ware.de/confluence ...

  5. zabbix 模版其实就是主机

    </pre><pre name="code" class="python">mysql> select hostid,host , ...

  6. linux下so动态库一些不为人知的秘密(上)

    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.        基本上每一个linux 程序都至少会有一个动态库,查看某个程序使 ...

  7. 关于select

    select 1与select * 的区别:“selelct 常量 from 表名” 对应所有行,返回的永远只有一个值,即常量 ,所以一般只用来判断是否有表记录:而“select * from 表名” ...

  8. 加濾鏡效果GlowTween

    /** * * new GlowTween(xxxx, 0xFFFF00); * new GlowTween(xxxx, 0x00FFFF); * GlowTween */ package com.r ...

  9. hdu 4712 Hamming Distance ( 随机算法混过了 )

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  10. base库中的BarrierClosure

    说明说得很明白,就是等侍num_closures 为零的时候回调done_closure,代码也很简单,不加详述 #ifndef BASE_BARRIER_CLOSURE_H_ #define BAS ...