classSolution{public:stringfractionAddition(stringexpression){istringstreamiss(expression);char_;inta;intb;intA=0;intB=1;// Init: A / B = 0 / 1// A / B + a / b = (Ab + aB) / Bb// So, each round set A = Ab + aB, B = Bbwhile(iss>>a>>_>>b){A=A*b+a*B;B*=b;constintg=abs(__gcd(A,B));A/=g;B/=g;}returnto_string(A)+"/"+to_string(B);}};
classSolution{publicStringfractionAddition(Stringexpression){Scannersc=newScanner(expression).useDelimiter("/|(?=[+-])");intA=0;intB=1;// Init: A / B = 0 / 1// A / B + a / b = (Ab + aB) / Bb// So, each round set A = Ab + aB, B = Bbwhile(sc.hasNext()){finalinta=sc.nextInt();finalintb=sc.nextInt();A=A*b+a*B;B*=b;finalintg=gcd(A,B);A/=g;B/=g;}returnA+"/"+B;}privateintgcd(inta,intb){returna==0?Math.abs(b):gcd(b%a,a);}}