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;
}

分数类

原文地址:https://www.cnblogs.com/Asurudo/p/10459878.html

时间: 2024-10-09 05:11:28

ACM模板——分数类的相关文章

实验11:Problem D: 分数类的模板数组类

在默认构造函数里面,分母的默认值不能为0!! Home Web Board ProblemSet Standing Status Statistics Problem D: 分数类的模板数组类 Problem D: 分数类的模板数组类 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 509  Solved: 350[Submit][Status][Web Board] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函

连分数(分数类模板) uva6875

1 //连分数(分数类模板) uva6875 2 // 题意:告诉你连分数的定义.求连分数,并逆向表示出来 3 // 思路:直接上分数类模板.要注意ai可以小于0 4 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <cstdio> 9 #include <vector> 10 #include <cmath> 11 #inclu

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

Problem S: 分数类的模板数组类 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2155  Solved: 1624[Submit][Status][Web Board] Description 封装一个模板数组类Array,支持一下操作: 1. 构造函数Array(int n),将数组初始化为n个存储空间: 2. 函数input(int n),读取最多n个元素,但不能超过数组存储空间的上限: 3. 重载下标运算符,返回数组的元素. 封装一

函数模板与类模板

函数模板,顾名思义,是在生成函数时依照的模板. 有时,我们需要对不同的数据类型做同样的函数操作. 比如:分别对一个int类型数 和 一个double类型数求平方. 这时,虽然都是同样的求平方操作(函数体内代码一样),但是我们必须要编写两个不同的函数,因为处理int类型的函数的参数和返回值类型都应该是int,而处理double类型的函数的参数和返回值都应该是double. 如下:函数体内操作代码一样,设计为重载函数,用相同的函数名,但是参数类型和返回值类型却都不一样,函数需要定义两次. int S

20Spring_JdbcTemplatem模板工具类

JdbcTemplate 是Spring提供简化Jdbc开发模板工具类.为了更好的了解整个JdbcTemplate配置数据库连接池的过程,这篇文章不采用配置文件的方式,而是采用最基本的代码 的方式来写.后一篇文章会讲配置文件的方式. 1.Spring 对一下的持久层技术支持 2.jdbcTemplate快速入门 第一步:在项目中导入jar包 其中Spring核心包有四个,日志包有两个,测试包一个.如下 因为要用到jdbcTemplate所以还要导入以下两个jar包 spring-jdbc-3.2

实验11:Problem C: 分数类的乘法

Home Web Board ProblemSet Standing Status Statistics Problem C: 分数类的乘法 Problem C: 分数类的乘法 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 650  Solved: 477[Submit][Status][Web Board] Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在

Problem F: 分数类的类型转换

Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数输出为"a/b"或"-a/b"的形式,a.b都是无符号整数.若a为0或b为1,只输出符号和分子,不输出"/"和分母. 3. double类型转换函数:用分子除以分母,得到的小数.注意:分子为0时不要输出为"-0" ----------

Problem C: 分数类的乘法

Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造:传入两个参数n和m,表示n/m:分数在构造时立即转化成最简分数. 2. show()函数:分数输出为"a/b"或"-a/b"的形式,a.b都是无符号整数.若a为0或b为1,只输出符号和分子,不输出"/"和分母. 3. 在分数类上重载乘法运算符,进行分数的乘法运算 ------------------------------------------

实验11:Problem A: 分数类的输出

注意如果是负数,要把负号放在分子上 Home Web Board ProblemSet Standing Status Statistics Problem A: 分数类的输出 Problem A: 分数类的输出 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1453  Solved: 574[Submit][Status][Web Board] Description 封装一个分数类Fract,用来处理分数功能和运算,支持以下操作: 1. 构造: