21xrx.com
2024-11-22 02:28:48 Friday
登录
文章检索 我的文章 写文章
C++中如何表示分数
2023-07-04 19:48:40 深夜i     --     --
C++ 表示 分数

在C++中,表示分数可以使用整数或浮点数来进行操作,但这些方法会产生精度上的误差。

因此,在C++中,表示分数最常用的方式是使用一个分数类。分数类可以容纳两个整数类型的数值,一个表示分子,一个表示分母。

分数类可以定义一些基本的操作,如分数的加、减、乘、除,以及化简分数等。这样我们就可以在程序中方便地进行分数的操作和计算。以下是一个简单的分数类实现示例:


class Fraction {

private:

  int numerator; // 分子

  int denominator; // 分母

public:

  Fraction(int n = 0, int d = 1) {

    numerator = n;

    denominator = d;

    simplify();

  }

  // 获取分子

  int getNumerator() const

    return numerator;

  

  // 获取分母

  int getDenominator() const

    return denominator;

  

  // 加法

  Fraction operator+(const Fraction& other) const {

    Fraction result(numerator * other.denominator + denominator * other.numerator, denominator * other.denominator);

    result.simplify();

    return result;

  }

  // 减法

  Fraction operator-(const Fraction& other) const {

    Fraction result(numerator * other.denominator - denominator * other.numerator, denominator * other.denominator);

    result.simplify();

    return result;

  }

  // 乘法

  Fraction operator*(const Fraction& other) const {

    Fraction result(numerator * other.numerator, denominator * other.denominator);

    result.simplify();

    return result;

  }

  // 除法

  Fraction operator/(const Fraction& other) const {

    Fraction result(numerator * other.denominator, denominator * other.numerator);

    result.simplify();

    return result;

  }

  // 化简分数

  void simplify() {

    int gcd = getGcd(numerator, denominator);

    numerator /= gcd;

    denominator /= gcd;

  }

  // 获取最大公约数

  int getGcd(int a, int b) const {

    return b == 0 ? a : getGcd(b, a % b);

  }

};

// 输出分数

std::ostream& operator<<(std::ostream& out, const Fraction& fraction) {

  out << fraction.getNumerator() << '/' << fraction.getDenominator();

  return out;

}

通过这个分数类的实现,我们可以方便地进行分数的加减乘除操作,并且可以很方便地将结果输出。示例:


Fraction f1(1, 2);

Fraction f2(2, 3);

Fraction f3 = f1 + f2;

std::cout << f3 << std::endl; // 输出 7/6

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复