HDU 1717 小数化分数2(最大公约数)
小数化分数2
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5723 Accepted Submission(s):
2339
在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
0.(4)
0.5
0.32(692307)
1/2
17/52
以0.94(375)为例子。
现将他乘100,变为94.(375)。
然后在取他的100000倍,变为94375.(375)
这样两个数小数点后相同,相减后就变为整数了。
以x代表原数;
100000x-100x=94375.(375)-94.(375)=94281
99900x=94281
x=94281/99900
好了这样就做出来了,
剩下的就是基础的字符串操作。
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
int gcd(int a, int b)
{
return b == ? a : gcd(b, a%b);
}
int main()
{
int n;
cin >> n;
char a[];
while (n--)
{
cin >> a;
int l = strlen(a);
int i;
int k = ;
int in = ;//不循环的有几位
bool yk = ;//是否有循环
int ans = ;//总的部分
int dec = ;//不循环部分
for (i = ; i < l; i++)
{
if (!yk&&a[i] >= ''&&a[i] <= '')
{
in++;
}
if (a[i]== '(')
{
yk = ;
}
if (yk&&a[i] >= ''&&a[i] <= '')
{
k++;
}
} for (i = ; i <= in + ; i++)//不循环部分先化为整数部分
{
dec = dec* + (a[i] - '');
}
if (!yk)//没有循环的话直接,比如0.5,dec=5,ll=10,答案为1/2
{
int ll =(int) pow(, in);
int x = gcd(dec, ll);
cout << dec / x << "/" << ll/ x << endl;
}
else
{//循环的话,举例0.32(692307)
for (i = ; i < l; i++)
{
if (a[i] >= ''&&a[i] <= '')
{
ans = ans* + (a[i] - '');
}
}
l = l - ;
ans = ans - dec;//对于该例子ans=32692307-32
int ll = (int)pow(, l);
int lll = (int)pow(, in);
ll = ll - lll;//对于该例子ll=100000000-100
int x = gcd(ans, ll);
cout << ans / x << "/" << ll/ x << endl;
}
}
return ;
}
HDU 1717 小数化分数2(最大公约数)的更多相关文章
- HDU 1717 小数化分数2 数学题
解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...
- 【HDU】1717 小数化分数2 ——计数原理
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hdu 1905 小数化分数2
;}
- 【HDOJ】1717 小数化分数2
简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...
- CSU 8月月赛 Decimal 小数化分数
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 这个OJ很容易跪所以我贴一下题目 Description 任意一个分数都是有理数,对于任意一 ...
- 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)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...
- 杭电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…… ...
随机推荐
- spring boot2 基于百度云apiface实现人脸检测与认证2
接上一篇,上篇只实现了人脸的认证,接下来实现人脸的检测. 原理介绍: 把摄像头抓拍的图像上传到服务器,服务器把图像上传到百度云,百度云返回识别出的人脸的数量和位置,前端根据服务端的返回,在图像中画出人 ...
- python判断key是否存在
d = {: , : , : , : , : , : } def is_key_present(x): if x in d: print('Key is present in the dictiona ...
- Vue.js的类Class 与属性 Style如何绑定
Vue.js的类Class 与属性 Style如何绑定 一.总结 一句话总结:数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是属性,我们可以用 v-bind 处理它们:我 ...
- Java线程状态分析
Java线程的生命周期中,存在几种状态.在Thread类里有一个枚举类型State,定义了线程的几种状态,分别有: NEW: 线程创建之后,但是还没有启动(not yet started).这时候它的 ...
- 51nod-1455-dp/缩小范围
1455 宝石猎人 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 苏塞克岛是一个有着30001个小岛的群岛,这 ...
- HDU1598 并查集+贪心
find the most comfortable road Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- CentOS 6.5安装和配置ngix
一.安装配置ngix 这里用wget直接拉取并安装资源文件 首先安装必要的库(nginx 中gzip模块需要 zlib 库,rewrite模块需要 pcre 库,ssl 功能需要openssl库). ...
- mysql 判断表字段是否存在,然后修改
-- ---------------------------- -- 判断 vrv_paw_rule 表是否存在 thresholdMin 字段,不存在则添加; 存在则修改字段类型 DELIMITER ...
- js预解析相关知识总结以及一些好玩的面试题
js预解析的题像在做智力题一样有意思~ 预解析 预解析:在解释这行代码之前发生的事情——变量的声明提前了,函数的声明提前 console.log(num) ——未定义Num,结果是报错 var num ...
- CF 272E Dima and Horses 染色,dfs 难度:2
http://codeforces.com/problemset/problem/272/E 把仇恨关系想象为边, 因为度只能为0,1,2,3,所以有以下几种 0,1 直接放即可 2: 有(1,1), ...