21xrx.com
2024-12-23 00:05:12 Monday
登录
文章检索 我的文章 写文章
C++有理数类:实现有理数的加减乘除运算
2023-07-02 09:04:59 深夜i     --     --
C++ 有理数类 加减乘除运算

C++是一种广泛用于计算机科学领域的编程语言,它非常适合用于开发高性能应用程序和算法。这里我们将介绍C++的有理数类,并通过这个类实现有理数的加减乘除运算。

有理数类是一种用于存储并处理有理数(分数)的数据类型,它通常包含两个整数分别表示分子和分母。有理数的加减乘除运算需要对这两个整数进行一系列的计算,并且需要特别注意分母为零的情况。

下面介绍我们实现的基本有理数类:


class Rational {

public:

  Rational(int numerator = 0, int denominator = 1);

  Rational operator+(const Rational& other) const;

  Rational operator-(const Rational& other) const;

  Rational operator*(const Rational& other) const;

  Rational operator/(const Rational& other) const;

  int numerator() const;

  int denominator() const;

  void set(int numerator, int denominator);

  void simplify();

private:

  int num, den;

};

这个有理数类包含了默认构造函数、加减乘除四个操作符重载函数、以及获取分子和分母的函数和简化分数的函数。其中,加减乘除四个操作符重载函数分别实现了有理数的加减乘除运算,返回值也是一个有理数类的对象。

他们的实现如下:


Rational Rational::operator+(const Rational& other) const

{

  int n = num * other.den + den * other.num;

  int d = den * other.den;

  return Rational(n, d);

}

Rational Rational::operator-(const Rational& other) const

{

  int n = num * other.den - den * other.num;

  int d = den * other.den;

  return Rational(n, d);

}

Rational Rational::operator*(const Rational& other) const

{

  return Rational(num * other.num, den * other.den);

}

Rational Rational::operator/(const Rational& other) const

{

  if (other.num == 0) {

    throw std::runtime_error("division by zero");

  }

  return Rational(num * other.den, den * other.num);

}

这四个操作符重载函数分别实现了有理数的加减乘除运算。需要注意的是,在除法运算中需要特别检查除数是否为零,如果是零则抛出异常避免程序崩溃。

有理数的简化在一定程度上可以提高程序的运行效率。我们实现了一个简化分数的函数:


void Rational::simplify()

{

  int gcd = std::gcd(num, den);

  num /= gcd;

  den /= gcd;

  if (den < 0)

    num = -num;

    den = -den;

  

}

这个简化分数的函数通过使用`std::gcd()`函数求出分子和分母的最大公因数,并将两个整数同时除以这个最大公因数来简化分数。需要注意的是,如果分母为负数,需要将分子和分母同时变号,以保证最简分数的分母为正数。

最后,我们还需要实现有理数类的构造函数和获取分子和分母的函数:


Rational::Rational(int numerator, int denominator)

{

  if (denominator == 0) {

    throw std::runtime_error("invalid denominator");

  }

  num = numerator;

  den = denominator;

  simplify();

}

int Rational::numerator() const

  return num;

int Rational::denominator() const

  return den;

void Rational::set(int numerator, int denominator)

{

  if (denominator == 0) {

    throw std::runtime_error("invalid denominator");

  }

  num = numerator;

  den = denominator;

  simplify();

}

有理数类的构造函数需要检查分母是否为零,如果为零则抛出异常。而获取分子和分母的函数则很简单,直接返回成员变量的值即可。

在使用有理数类时,我们可以直接使用加减乘除四个操作符重载函数进行有理数的运算,例如:


Rational a(1, 2);

Rational b(2, 3);

Rational c = a + b; // c = 7/6

c = a - b; // c = -1/6

c = a * b; // c = 1/3

c = a / b; // c = 3/4

有理数类的实现可以大大简化有理数计算的过程,并且具有很好的封装性和可复用性,可以在各种需要处理有理数的场合中使用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章