View Code of Problem 3496

#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.


Back to problem 3496