This documentation is automatically generated by online-judge-tools/verification-helper
This project is maintained by tsutaj
// fraction library (use C++11) struct fraction{ // init (nume / deno) int numerator, denominator; fraction(int i) : numerator(i), denominator(1) {} fraction(int i, int j) : numerator(i), denominator(j) {} fraction(string s) { int i = s.find('/'); if(i != string::npos) { numerator = atoi(s.substr(0,i).c_str()); denominator = atoi(s.substr(i+1).c_str()); } else { numerator = atoi(s.c_str()); denominator = 1; } } fraction fixshape(fraction A) { int p = A.denominator, q = A.numerator; if(p < 0) {p *= -1; q *= -1;} int k = gcd(abs(p), abs(q)); p /= k, q /= k; A.denominator = p, A.numerator = q; return A; } }; // print fraction string printfrac(fraction A, int n) { if(!n) return to_string(A.numerator) + "/" + to_string(A.denominator); else { if(A.denominator == 1) return to_string(A.numerator); else return printfrac(A, 0); } } string printfrac(fraction A) { if(A.denominator == 1) return to_string(A.numerator); else return printfrac(A, 0); } void simplify(fraction &A, fraction &B) { int k = lcm(A.denominator, B.denominator); A.numerator *= (k / A.denominator); B.numerator *= (k / B.denominator); A.denominator = k; B.denominator = k; } // overloading the arithmetic operators fraction operator+(const fraction &A, const fraction &B) { int q = lcm(A.denominator, B.denominator); int p = A.numerator * (q / A.denominator) + B.numerator * (q / B.denominator); fraction ret = ret.fixshape(fraction(p, q)); return ret; } fraction operator-(const fraction &A, const fraction &B) { int q = lcm(A.denominator, B.denominator); int p = A.numerator * (q / A.denominator) - B.numerator * (q / B.denominator); fraction ret = ret.fixshape(fraction(p, q)); return ret; } fraction operator*(const fraction &A, const fraction &B) { int p = A.numerator * B.numerator; int q = A.denominator * B.denominator; int k = gcd(abs(p), abs(q)); p /= k, q /= k; fraction ret = ret.fixshape(fraction(p, q)); return ret; } fraction operator/(const fraction &A, const fraction &B) { fraction C = C.fixshape(fraction(B.denominator, B.numerator)); fraction ret = ret.fixshape(A*C); return ret; } bool operator<(const fraction &A, const fraction &B) { fraction C = A, D = B; simplify(C, D); return C.numerator < D.numerator; } bool operator>(const fraction &A, const fraction &B) { fraction C = A, D = B; simplify(C, D); return C.numerator > D.numerator; } // fraction library end
#line 1 "math/math_007_fraction.cpp" // fraction library (use C++11) struct fraction{ // init (nume / deno) int numerator, denominator; fraction(int i) : numerator(i), denominator(1) {} fraction(int i, int j) : numerator(i), denominator(j) {} fraction(string s) { int i = s.find('/'); if(i != string::npos) { numerator = atoi(s.substr(0,i).c_str()); denominator = atoi(s.substr(i+1).c_str()); } else { numerator = atoi(s.c_str()); denominator = 1; } } fraction fixshape(fraction A) { int p = A.denominator, q = A.numerator; if(p < 0) {p *= -1; q *= -1;} int k = gcd(abs(p), abs(q)); p /= k, q /= k; A.denominator = p, A.numerator = q; return A; } }; // print fraction string printfrac(fraction A, int n) { if(!n) return to_string(A.numerator) + "/" + to_string(A.denominator); else { if(A.denominator == 1) return to_string(A.numerator); else return printfrac(A, 0); } } string printfrac(fraction A) { if(A.denominator == 1) return to_string(A.numerator); else return printfrac(A, 0); } void simplify(fraction &A, fraction &B) { int k = lcm(A.denominator, B.denominator); A.numerator *= (k / A.denominator); B.numerator *= (k / B.denominator); A.denominator = k; B.denominator = k; } // overloading the arithmetic operators fraction operator+(const fraction &A, const fraction &B) { int q = lcm(A.denominator, B.denominator); int p = A.numerator * (q / A.denominator) + B.numerator * (q / B.denominator); fraction ret = ret.fixshape(fraction(p, q)); return ret; } fraction operator-(const fraction &A, const fraction &B) { int q = lcm(A.denominator, B.denominator); int p = A.numerator * (q / A.denominator) - B.numerator * (q / B.denominator); fraction ret = ret.fixshape(fraction(p, q)); return ret; } fraction operator*(const fraction &A, const fraction &B) { int p = A.numerator * B.numerator; int q = A.denominator * B.denominator; int k = gcd(abs(p), abs(q)); p /= k, q /= k; fraction ret = ret.fixshape(fraction(p, q)); return ret; } fraction operator/(const fraction &A, const fraction &B) { fraction C = C.fixshape(fraction(B.denominator, B.numerator)); fraction ret = ret.fixshape(A*C); return ret; } bool operator<(const fraction &A, const fraction &B) { fraction C = A, D = B; simplify(C, D); return C.numerator < D.numerator; } bool operator>(const fraction &A, const fraction &B) { fraction C = A, D = B; simplify(C, D); return C.numerator > D.numerator; } // fraction library end