【U218】A-B
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
给出一个A/B-C/D表示的分数减法算式,A,B,C,D均为不超过32767的正整数,求A/B-C/D的差,若差为整数,则输出这个整数;若差为分数,则按A/B格式输出;要求为最简分数,若差为负数,则在上述要求下最前面添加负号。 输入中A/B或C/D有可能不是最简分数,但是你的输出必须是最简分数。
【输入格式】
输入文件aminusb.in的第1行为一个正整数T,表示数据组数, 接下来T行,每行为按A/B-C/D格式给出的算式。
【输出格式】
输出文件aminusb.out包括T行,分别对于每个算式给出答案。
【数据规模】
对于30%的数据,有T≤10; 对于100%的数据,有T≤10000。
Sample Input1
3
1/3-1/2
10/4-2/2
3/2-1/2
Sample Output1
-1/6
3/2
1
【题解】 C++可以直接用scnaf过滤掉-和/。所以读入a,b,c,d不是问题。
然后对于输入的a,b获取他们的最大公因数k。然后同时除掉k。
c和d也是一样。同时除k。
然后a/b-c/d用通分的方法 = (a*d-b*c)/(b*d)
然后一开始符号为正(1),若是分子为负数,把分子取相反数,然后符号为1-flag == 0(负数);
如果分母也是负号,则分母也取反。然后符号为1-flag == 1(正数);
最后如果符号为负,则输出一个“-”,然后输出分子/分母的形式即可。 【代码】#include <cstdio> int t,a,b,c,d; int gcd(int a, int b) //获取a和b的最大公因数。
{
if (b == 0)
return a;
else
return gcd(b, a % b);
} int main()
{
scanf("%d", &t);
for (int i = 1; i <= t; i++) //输入t组数据
{
scanf("%d/%d-%d/%d", &a, &b, &c, &d); //可以直接过滤出a,b,c,d;
int k = gcd(a, b);//获取a和b的最大公因数。
a /= k;
b /= k;//模拟约分过程
k = gcd(c, d); //获取c和d的最大公因数。
c /= k;//模拟约分
d /= k;
bool flag = 1; //最后答案的符号
int fenzi = a*d - b*c;
if (fenzi < 0) //分子为负数改变答案符号
{
flag = 1 - flag;
fenzi = -fenzi; //同时保证分子和分母都是非负数。
}
int fenmu = b*d;
if (fenmu < 0)//分母为负数改变答案符号。
{
flag = 1 - flag;
fenmu = -fenmu;
}
if (!flag)//如果最后答案是负数则输出一个负号
printf("-");
k = gcd(fenzi, fenmu); //最后的分子和分母也要进行一次约分操作。
fenzi /= k;
fenmu /= k;
if (fenmu == 1 || fenzi == 0) //如果分母是1或者分子是0则输出一个整数。(分子和0)
printf("%d\n", fenzi);
else //否则按照分数的形式正常输出即可。
printf("%d/%d\n", fenzi, fenmu);
}
return 0;
}
【U218】A-B的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
随机推荐
- JS 原型模式创建对象
例子: class Test { constructor(val) { this.val = val } walk() { console.log(this) console.log('walk') ...
- ACM 中JAVA的应用
原文地址:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C+ ...
- linux创建新用户并给予root权限
root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用.所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机.所以,在 ...
- Spring异步执行(@Async)2点注意事项
Spring中可以异步执行代码,注解方式是使用@Async注解. 原理.怎么使用,就不说了. 写2点自己遇到过的问题. 1.方法是公有的 // 通知归属人 @Async public void not ...
- [NPM] Publish npm packages using npm publish
In this lesson we will publish our package. We will first add a prepublish script that runs our buil ...
- nagios 安装配置(包含nrpe端)全 (一)
一.nagios安装: 1.安装下面命令: 这是本人监控服务时自己定义插件所用到的几个系统命令.可不安装. (1)iostat:监控磁盘IO信息: apt-getinstall sysstat (2) ...
- html中的瀑布流是什么
html中的瀑布流是什么 一.总结 1.瀑布流: 从左往右排列,哪一列现在的总高度最小,就优先排序把item(单元格)放在这一列.这样排完所有的单元格后,可以保证每一列的总高度都相差不大 2.看效果图 ...
- 【2017 Multi-University Training Contest - Team 7 && hdu 6121】Build a tree
[链接]点击打开链接 [题意] 询问n个点的完全k叉树,所有子树节点个数的异或总和为多少. [题解] 考虑如下的一棵k=3叉树,假设这棵树恰好有n个节点. 因为满的k叉树,第i层的节点个数为k^(i- ...
- winform最大化后不遮挡任务栏
在窗体初始化后添加一句代码 this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
- Vim 模式及常用命令整理
VIM 命令 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. vim的模式 基本上可以分为3种模式,分别是命令模式(command mode).插入模 ...