ACM模板——分数类

Posted asurudo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM模板——分数类相关的知识,希望对你有一定的参考价值。

技术图片
#include <bits/stdc++.h>
using namespace std;

#define _for(i,a,b) for(int i = (a);i < (b);i ++)
const int maxn = 50003;

int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}
int lcm(int a,int b){return a/gcd(a,b)*b;}

class Fraction
{
    public:
        int a,b;
        int sign(int x) {return (x>0?1:-1);}
        Fraction():a(0),b(1){}
        Fraction(int x):a(x),b(1){}
        Fraction(int x,int y)
        {
            int m = gcd(abs(x),abs(y));
            a = x/m*sign(y);
            if(a==0)b=1;else b = abs(y/m);
        }
        int get_denominator() {return b;}
        int get_numerator() {return a;}
        Fraction operator+(const Fraction &f)
        {
            int m = gcd(b,f.b);
            return Fraction(f.b/m*a+b/m*f.a,b/m*f.b);
        }
        Fraction operator-(const Fraction &f)
        {
            int m = gcd(b,f.b);
            return Fraction(f.b/m*a-b/m*f.a,b/m*f.b);
        }
        Fraction operator*(const Fraction &f)
        {
            int m1 = gcd(abs(a),f.b);
            int m2 = gcd(b,abs(f.a));
            return Fraction((a/m1)*(f.a/m2),(b/m2)*(f.b/m1));
        }
        Fraction operator/(const Fraction &f)
            {return (*this)*Fraction(f.b,f.a);}
        friend ostream &operator << (ostream &out,const Fraction &f)
        {
            if(f.a==0) cout << 0;
            else if(f.b==1) cout << f.a;
            else cout << f.a << / << f.b;
            return out; 
        }
};

int main()
{
    Fraction p(18,10);
    Fraction o(11,17);
    cout << p*o << endl; 
    return 0;
}
分数类

 

以上是关于ACM模板——分数类的主要内容,如果未能解决你的问题,请参考以下文章

Problem S: 分数类的模板数组类

ACM模板——string类

UVA 10288 Coupons---概率 && 分数类模板

小学鸡四则运算(用数据结构打败模拟)

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段1——vue主模板