#include<iostream> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; struct Fraction{ int up; int down; }; int gcd(int a,int b){ a=abs(a); b=abs(b); if(b==0) return a; else return gcd(b,a%b); } Fraction reduction(Fraction result){ if(result.down<0){ result.up=-result.up; result.down=-result.down; } if(result.up==0) result.down=1; else { int d=gcd(result.up,result.down); result.up/=d; result.down/=d; } return result; } Fraction add(Fraction f1,Fraction f2){ Fraction result; result.up=f1.up*f2.down+f2.up*f1.down; result.down=f1.down*f2.down; return reduction(result); } Fraction minu(Fraction f1,Fraction f2){ Fraction result; result.up=f1.up*f2.down-f2.up*f1.down; result.down=f1.down*f2.down; return reduction(result); } int main(){ Fraction a,b,result; char o; while(~scanf("%d/%d%c%d/%d",&a.up,&a.down,&o,&b.up,&b.down)){ if(o=='+') result=add(a,b); else if(o=='-') result=minu(a,b); if(result.up==0) printf("%d\n",0); else if(result.up==result.down) printf("%d\n",1); else if(result.down==1) printf("%d\n",result.up); else printf("%d/%d\n",result.up,result.down); } } |
Double click to view unformatted code.