哈理工 1178 分数加减(简单的模拟)
2016-05-15 21:17
85 查看
题目链接:
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1178
分数加减
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 430(195 users) Total Accepted: 191(181 users) Rating: Special Judge: No
Description
实现两个分数之间的加减法。
Input
输入包括多组测试用例
每行是”a/b-c/d”,或”a/b+c/d”的形式。
其中a, b, c, d是0-9的整数。
输入数据保证合法。
Output
输出分数结果。
注意输出没有多余符号,若结果为正,不需要“+”号。
结果应为最简形式,例如结果应为1/2而非2/4、2而非2/1。
Sample Input
1/4-1/2
1/3-1/3
Sample Output
-1/4
0
下面是AC代码:
有个坑点,坑点就是分子是分母倍数时候的处理。
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1178
分数加减
Time Limit: 1000 MS Memory Limit: 65536 K
Total Submit: 430(195 users) Total Accepted: 191(181 users) Rating: Special Judge: No
Description
实现两个分数之间的加减法。
Input
输入包括多组测试用例
每行是”a/b-c/d”,或”a/b+c/d”的形式。
其中a, b, c, d是0-9的整数。
输入数据保证合法。
Output
输出分数结果。
注意输出没有多余符号,若结果为正,不需要“+”号。
结果应为最简形式,例如结果应为1/2而非2/4、2而非2/1。
Sample Input
1/4-1/2
1/3-1/3
Sample Output
-1/4
0
下面是AC代码:
有个坑点,坑点就是分子是分母倍数时候的处理。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int gcd(int x,int y) { if(y==0) return x; return gcd(y,x%y); } int main() { int a,b,c,d; char str; while(~scanf("%d/%d%c%d/%d",&a,&b,&str,&c,&d)) { int aa=a*d; int bb=b*d; int cc=c*b; int dd=d*b; int re; if(str=='-') re=aa-cc; else { re=aa+cc; } if(re==0) { printf("0\n"); continue; } if(re%dd==0) { printf("%d\n",re/dd); continue; } int ss=gcd(fabs(re),bb); printf("%d/%d\n",re/ss,bb/ss); } return 0; }
相关文章推荐
- cookie、session和java过滤器
- redhat6.4安装arm-linux-gcc
- mysql sql
- RHEL7磁盘加密和RAID0创建
- 伸展树 splay tree
- 机器学习-支持向量机SVM学习笔记二
- 喷水装置(二)
- 剑指Offer--042-翻转单词顺序列
- shell从入门到放弃(下)
- "围观"设计模式(11)--结构型之适配器模式(Adapter Pattern)
- Fragment加网络请求数据HttpClient
- Spring依赖注入及IOC控制反转
- Android群英传学习记录-第二章
- CODEVS 1959 拔河比赛(另一版本)
- 80 多个 Linux 系统管理员必备的监控工具
- CODEVS 1959 拔河比赛(另一版本)
- error: Your local changes to the following files would be overwritten by merge
- php热身2:CRUD with Ajax
- 动态规划求最长子串
- PAT,1002,写出这个数