蓝桥杯:分数加减法
来源:互联网 发布:全国安全网络知识竞赛 编辑:程序博客网 时间:2024/06/05 14:39
描述
编写一个C程序,实现两个分数的加减法
输入
输入包含多行数据
每行数据是一个字符串,格式是”a/boc/d”。
其中a, b, c, d是一个0-9的整数。o是运算符”+”或者”-“。
数据以EOF结束
输入数据保证合法
输出
对于输入数据的每一行输出两个分数的运算结果。
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/8
1/4-1/2
1/3-1/3
样例输出
1/2
-1/4
0
代码:
#include<iostream>using namespace std;int minCommon(int x,int y){ int min; if(x>y) min=y; else min=x; while(!(x%min==0&&y%min==0)) min--; return (x*y)/min;}int maxCommon(int x,int y){ int r=x%y; while(r!=0) { x=y;y=r;r=x%y; } return y;}int main(){ char a[100]; while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]) { if((int)a[3]==43) // 43='-' { int x=minCommon(a[2]-48,a[6]-48); int y=x/(a[2]-48); int z=x/(a[6]-48); int m=maxCommon((a[0]-48)*y+(a[4]-48)*z,x); if(x/m==1) cout<<((a[0]-48)*y+(a[4]-48)*z)/m<<endl; else cout<<((a[0]-48)*y+(a[4]-48)*z)/m<<"/"<<x/m<<endl; } else if((int)a[3]==45) /// 45='+' { double s=(double)(a[0]-48)/(a[2]-48); double q=(double)(a[4]-48)/(a[6]-48); if(s==q) cout<<"0"<<endl; else { int x=minCommon(a[2]-48,a[6]-48); int y=x/(a[2]-48); int z=x/(a[6]-48); int m=maxCommon((a[0]-48)*y+(a[4]-48)*z,x); if(x/m==1) cout<<((a[0]-48)*y-(a[4]-48)*z)/m<<endl; else cout<<((a[0]-48)*y-(a[4]-48)*z)/m<<"/"<<x/m<<endl; } } }}
0 0
- 蓝桥杯:分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 分数加减法
- 端口扫描器-源码-易语言
- 位运算的简介与实例(Mysql)
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 3
- 【多线程】BlockingQueue详解
- BroadcastReceiver广播的使用
- 蓝桥杯:分数加减法
- JSONObject,JSONArray取值
- Markdown2
- ROM的进化史、RAM与CMOS
- intent.setFlags方法中的参数值内涵
- URLConnection 和HttpURLConnection
- 易语言取外网ip的两种方法
- ACM 求素数 线性筛法 o[n]
- C语言的一些特殊用法(#define)