分数加减法
时间限制:
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
-
#include<iostream> #include<algorithm> #include<cmath> using namespace std; int f1,m1,f2,m2; char ch,s; int j,k,l,i,m,z; int gcd(int mi,int ma){ ///寻找最大公约数 int m; if(mi>ma){ m=mi; mi=ma; ma=m; } while(mi){ m=ma%mi; ma=mi; mi=m; } // cout<<mi<<endl; return ma; } void ccout(){ /// 当四个数值当中其中一个为零的时候的输出 z=0; if(m1==0&&m2==0) cout<<"0"; else if(f1==0&&f2==0) cout<<"0"; ///特判各种特例 else if((f1==0||m1==0)&&m2!=0&&f2!=0){ if(s=='-') ///减号记得输出 cout<<"-"; int t=gcd(m2,f2); if(m2/t!=1) { ///判断分子分母有没有最大公约数 cout<<f2/t<<ch<<m2/t; } else cout<<f2/t; } else if(m1!=0&&f1!=0&&(m2==0||f2==0)){ int t=gcd(m1,f1); if(m1/t!=1) cout<<f1/t<<ch<<m1/t; else cout<<f1/t; } } int main(){ while(cin>>f1>>ch>>m1>>s>>f2>>ch>>m2){ if(m1!=0&&m2!=0&&f1!=0&&f2!=0){ if(m1==m2){ ///分母相等 m=m1; k=f1; l=f2; if(s=='-'){ j=k-l; ///判断分子是否为零 if(j==0) cout<<"0"; else{ l=gcd(abs(j),m1); if(m1/l==1) ///分子分母是否有最大公约数 cout<<j/l; else cout<<j/l<<ch<<m1/l; } } else{ j=k+l; l=gcd(abs(j),m1); if(m1/l==1) cout<<j/l; else cout<<j/l<<ch<<m1/l; } } else{ ///分母 不相等 m=m1*m2; k=f1*m2; l=f2*m1; if(s=='-'){ j=k-l; if(j==0) cout<<"0"; else{ i=gcd(abs(j),m); if(m/i==1) cout<<j/i; else cout<<j/i<<ch<<m/i; } } else{ j=k+l; i=gcd(abs(j),m); if(m/i==1) cout<<j/i; else cout<<j/i<<ch<<m/i; } } } else ccout(); cout<<endl; } return 0; }
-
wa 试试 0/0-1/1 1/1-8/4 0/1+1/1 0/0-0/0 这种特例
-
-
-
输入包含多行数据