ACM学习历程—HDU1717 小数化分数2(gcd)
Description
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
Sample Input
Sample Output
假如设小数点后的整数记为val1,括号里循环的整数记为val2。
val1的位数记为len1,val2的位数记为len2。
记小数的不循环部分是e1, 循环部分是e2.
对于e2 * 10^len1这个小数t:
必然t * 10^len2 - val2 = t;
自然t = val2 / (10^len2 - 1)
e2 = val2 / (10^len2 - 1) / 10^len1;
然后e1 = val1 / 10^len1;
所以整个小数就是e1 + e2;
然后对分子分母同分一下,最后分子分母再同除最小公倍数即可。
需要注意的是要对len2等于0的情况特判一下。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <string>
#define LL long long using namespace std; LL e[], val1, val2, A, B;
int len1, len2;
char str[]; void Init()
{
e[] = ;
for (int i = ; i < ; ++i)
{
e[i] = *e[i-];
}
} void Input()
{
scanf("%s", str);
len1 = len2 = ;
val1 = val2 = ;
for (int i = ; str[i] != '\0'; ++i)
{
if (str[i] == '(')
{
for (int j = i+; str[j] != ')'; ++j)
{
val2 = *val2 + str[j] - '';
len2++;
}
break;
}
val1 = *val1 + str[i] - '';
len1++;
}
if (len2)
{
A = val1*(e[len2] - ) + val2;
B = e[len1] * (e[len2]-);
}
else
{
A = val1;
B = e[len1];
}
} LL gcd(LL a, LL b)
{
if (b == )
return a;
else
return gcd(b, a%b);
} void Work()
{
LL d = gcd(A, B);
A /= d;
B /= d;
printf("%I64d/%I64d\n", A, B);
} int main()
{
//freopen("test.in", "r", stdin);
int T;
scanf("%d", &T);
Init();
for (int times = ; times < T; ++times)
{
Input();
Work();
}
return ;
}
ACM学习历程—HDU1717 小数化分数2(gcd)的更多相关文章
- HDU1717小数化分数2
小数化分数2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- ACM学习历程—Hihocoder 1177 顺子(模拟 && 排序 && gcd)(hihoCoder挑战赛12)
时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种 ...
- CSU 8月月赛 Decimal 小数化分数
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1303 这个OJ很容易跪所以我贴一下题目 Description 任意一个分数都是有理数,对于任意一 ...
- 【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)直接二分答案.说实话我没有想到, 一开始以为是贪心, 以某种策略能得到最优解. 但是想了很久 ...
- 杭电oj1717——小数化分数(java实现)
question:小数化分数2 思路: /** * 这道题没有整数部分(有也无所谓,算小数部分,算完了分子分母按倍数加上就好),也就是说数组直接从a[2]开始后面是小数,我把这道题分为了三类: * * ...
- HDU 1717 小数化分数2 数学题
解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...
- ACM学习历程—HDU5587 Array(数学 && 二分 && 记忆化 || 数位DP)(BestCoder Round #64 (div.2) 1003)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5587 题目大意就是初始有一个1,然后每次操作都是先在序列后面添加一个0,然后把原序列添加到0后面,然后 ...
随机推荐
- Bootstrap学习速查表(一) 理论基础
参考网站http://www.bootcss.com/ 第一步,起步,引入基本样式 <!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="st ...
- javascript调试常用工具讲解
.Console命令详解,让调试js代码变得更简单 2.<Firebug入门指南>
- ASP.NET动态网站制作(1)--html
前言:正式上课的第一课,讲的是前端部分的最基础内容:html. 前端:html,css,js 数据库:sql server 动态部分:.net,c#... IIS(Internet Informati ...
- Easy AR简单教程
Easy AR简单教程 相关SDK资源下载链接:http://pan.baidu.com/s/1dERtCWD 密码:o0jd 1.ImageTarget的制作 (1).导入EasyARSD包,删 ...
- iOS 逆向 - Class-dump 安装和使用方法
1.下载安装包 http://stevenygard.com/projects/class-dump/,这里我下载的是 class-dump-3.5.dmp.然后把下载下来的 dmg 打开,复制文件里 ...
- Hadoop常见异常及其解决方式
1.Shell$ExitCodeException 现象:执行hadoop job时出现例如以下异常: 14/07/09 14:42:50 INFO mapreduce.Job: Task Id : ...
- jquery在网页实时显示时间;
1.定义一个显示时间的位置 <div id="shijian"> </div> 2.jquery代码 function showTime() { var c ...
- Entity Framework 4.1:多对多的关系
这篇文章讨论多对多的关系. 让我们从最简单的例子开始.我们让 EF4.1 来推断表的映射.我在订单和雇员之间建模多对多的关系. )] publicstring CustomerName { get; ...
- ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql 删除表时提示有外键 mysql> drop tables auth_group;ERROR 1217 (23000): Cannot delete or update a paren ...
- Java for LeetCode 111 Minimum Depth of Binary Tree
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...