【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的所有方方面面,比 ...
随机推荐
- jsp 用shiro 的判断 是否有菜单查看的权限
实例:spring-shiro.xml 123 /admin/repairType/index = roles["ROLE_ADMIN"]/admin/user=roles[&qu ...
- 关于android主线程异常NetworkOnMainThread不能訪问网络
今天在学习的过程中遇到了NetworkOnMainThread的异常,关于这个异常问题在android sdk 4.0版本号上,这个问题可能比較常见,查了许些资料大多都是大概解说原因,可是没有解说到详 ...
- android adb常见问题的解决方法!
** adb的常见问题 adb:android debug bridge,用于连接模拟器/手机与PC端软件(比如:eclipse或者xx手机助手) adb devices -> ...
- cx_Oracle
cx_Oracle 安装 pip install cx_Oracle 只是我没用那个安装成功过.我找了rpm 包. http://nchc.dl.sourceforge.net/project/cx- ...
- Android应用开发-广播和服务
广播 广播的概念 现实:电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件. Android系统 ...
- matlab 文件路径问题
1. fullfile:路径补全 f = fullfile(filepart1,...,filepartN) 显然可变参数之间填充的路径分隔符(path separator),会根据操作系统而变化: ...
- (错误记录)git push 报错 403
在push的时候遇到错误: RPC failed; HTTP curl The requested URL returned error: Forbidden 如果是自己创建的项目的话,可以在网上找到 ...
- Linux CentOS PhpMyAdmin安装--转载
原文地址:https://www.centos.bz/2011/04/linux-centos-phpmyadmin-install/ 安装好PHP,Apache和MySQL程序后,为了管理MySQL ...
- java.util.ConcurrentModificationException(如何避免ConcurrentModificationException)
java.util.ConcurrentModificationException is a very common exception when working with java collecti ...
- C语言深度剖析-----指针数组和数组指针的分析
指针数组和数组指针的分析 数组类型 定义数组类型 数组指针 这个不可能为数组指针,指向数组首元素 例 指针数组 例 main函数的参数 例 小结