如何在C ++中将数字添加到分数?

问题描述

我创建了一个小数部分:

class Fraction
{
private:
    int numarator_,denum_;
public:
    constexpr Fraction(int numarator,int denum=1) noexcept : numarator_(numarator),denum_(denum) {}
    virtual ~Fraction() = default;

并且我想创建一个将数字添加到特定分数的函数,就像这样:

int main()
{
    Fraction fr(9,4);
    double res=fr.add(5);
    std::cout<<res;
}

我真的不知道如何处理它。.作为原理,我知道它是如何工作的,但是我做错了..如果我可以添加分数f作为参数,那会很好,但是我不能,那就是我必须做。 我试图做这样的事情:

constexpr double add(const int number)
    {
        Fraction* fr;
        int numarator2=number* fr->denum_;
        return Fraction(fr->numarator_ + numarator2,fr->denum_); //here i return a fraction and i kNow i must return a double,the result but i am comfused
        
    }

是的,构造函数函数add必须为constexpr

解决方法

number添加到分数时,需要添加number的分母单位:

constexpr Fraction add(const int number)
{
    return Fraction(numarator_ + number * denum_,denum_);
}
换句话说。无需创建该临时Fraction*指针。并注意函数返回值的类型更改。 ,

您正在使用指针而不进行初始化。

您应该返回Fraction而不是double

此外,您可能会减少分数。如果是这样,您可以使用std::gcd()中定义的#include <numeric>(需要C ++ 17)。

constexpr Fraction add(const int number)
{
    int newNumetator = numarator_ + number * denum_;
    const int g = std::gcd(newNumerator,denum_);
    newNumerator /= g;
    const int newDenominator = denum_ / g;
    return Fraction(newNumerator,newDenominator);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...