南阳理工111---分数加减法
分数加减法
时间限制:3000 ms | 内存限制:65535 KB
难度:2
- 描述
- 编写一个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
- 来源
- 水题比赛
- 上传者
- hzyqazasdf
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } int main() { char c1,c2,c3; int a,b,c,d; while(cin>>a>>c1>>b>>c2>>c>>c3>>d) { int t=gcd(b,d); int b1=b*d/t; //约分的分母 a=a*(b1/b);c=c*(b1/d); //分子 if(c2=='+') { if(b==1&&d==1) //整数处理 cout<<a+c<<endl; else if(a+c==0) //如果相加后为0 cout<<0<<endl; else { a=a+c; int t1=gcd(a,b1); if(b1/t1==1) //如果后来的分数中分母为1 cout<<a/t1<<endl; else cout<<a/t1<<"/"<<b1/t1<<endl; } } else if(c2=='-'&&a>=c) { a=a-c; if(a==0) cout<<0<<endl; else if(b==1&&d==1) cout<<a<<endl; else { int t2=gcd(a,b1); if(b1/t2==1) cout<<a/t2<<endl; else cout<<a/t2<<"/"<<b1/t2<<endl; } } else if(c2=='-'&&a<c) { if(b==1&&d==1) cout<<a-c<<endl; else { a=c-a; int t3=gcd(a,b1); if(b1/t3==1) cout<<"-"<<a/t3<<endl; else cout<<"-"<<a/t3<<"/"<<b1/t3<<endl; } } } return 0; }