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…… ...
随机推荐
- luogu p3366 最小生成树模板
倒腾了一个小时 自己也没去看网上的 总算自己能写出来模板了 kruskal //最小生成树 每次找最短的边 #include<bits/stdc++.h> using namespace ...
- HDU 6053 TrickGCD(莫比乌斯反演)
http://acm.hdu.edu.cn/showproblem.php?pid=6053 题意:给出一个A数组,B数组满足Bi<=Ai. 现在要使得这个B数组的GCD值>=2,求共有多 ...
- POJ 2288 Islands and Bridges(状压dp)
http://poj.org/problem?id=2288 题意: 有n个岛屿,每个岛屿有一个权值V,一条哈密顿路径C1,C2,...Cn的值为3部分之和: 第1部分,将路径中每个岛屿的权值累加起来 ...
- POJ 2391 Ombrophobic Bovines(二分+拆点+最大流)
http://poj.org/problem?id=2391 题意: 给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T,使得在T时间内所有的牛都能进到某一牛棚里去. 思路 ...
- Ubuntu server 禁止显示器休眠
Linux不让显示器休眠的方法 # setterm -blank # setterm -blank n (n为等待时间)
- 将Excel的数据更新至SqlServer
update P_Dic_Region set F_Long=a.F_Long,F_Lat=a.F_Lat from( select * from OPENDATASOURCE( 'Microsoft ...
- Aizu-2200-floyd+dp
Mr. Rito Post Office 你是一个为远程邮局邮局工作的程序员.你住的地区由几个岛屿组成.每个岛屿都有一个或多个港口城镇.除此之外,还有其他城镇和村庄.为了从一个岛到另一个岛,你必须使用 ...
- NYOJ 720 DP+二分
项目安排 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个 ...
- UVALive-2531 The K-League (最大流建模+枚举)
题目大意:有n支足球队,已知每支球队的已胜场数和任意两支球队之间还需要的比赛场数a[i][j],求最终可能夺冠的所有球队. 题目分析:枚举所有的球队,对于球队 i 让它在接下来的比赛中全部获胜,如果这 ...
- gradle ssh 插件
org.hidetake.ssh Gradle SSH Plugin is a Gradle plugin which provides remote command execution and fi ...