分数运算问题
帮忙提供下思路,有点迷茫
在我的下面这个程序的基础下,不做大的改动,如何以以下两种输入求得分数运算结果,,

RNumber.h文件
代码如下:
主函数文件
在我的下面这个程序的基础下,不做大的改动,如何以以下两种输入求得分数运算结果,,


RNumber.h文件
代码如下:
#ifndef _RNUMBER_
#define _RNUMBER_
#include<iostream>
using namespace std;
class RNumber
{
int numerator,//分子
denominator;//分母
public:
void reduction();//约分
void setNumerator(int m) { numerator = m; }//设置分子
void setDenominator(int n) { denominator = n; }//设置分母
int getNumerator()const { return numerator; }//返回分子
int getDenominator()const { return denominator; }//返回分母
friend RNumber operator+(RNumber fraction1, RNumber fraction2);
friend RNumber operator-(RNumber fraction1, RNumber fraction2);
friend RNumber operator*(RNumber fraction1, RNumber fraction2);
friend RNumber operator/(RNumber fraction1, RNumber fraction2);
friend istream& operator>>(istream& in, RNumber &a);
friend ostream& operator<<(ostream& out, RNumber &a);
};
void RNumber::reduction()
{
int n = numerator;
if (n != 0)
{
//排除分数为负数的情况
if (n < 0)
{
n = abs(n);
}
int d = denominator;
if (d < 0)
{
d = abs(d);
}
while (n!=0&&n != d)//若分子为0,不约分
{//辗转相减法求公约数
if (n > d)
n-=d;
else
d-=n;
}
numerator /= n;
denominator /= d;
}
}
istream& operator>>(istream &in, RNumber& a)
{
int m, //记录分子
n;//记录分母
char ch;
in >> m >> ch >> n;
if (n == 0)
{
cout<<"分母不能为0!\n";
exit(0);
}
a.setNumerator(m);
a.setDenominator(n);
a.reduction();
return in;
}
ostream& operator<<(ostream& out, RNumber &a)
{
out << a.numerator << "/" << a.denominator;
return out;
}
RNumber operator+(RNumber fraction1, RNumber fraction2)
{
RNumber end;
end.denominator = fraction1.denominator*fraction2.denominator;
end.numerator = fraction1.denominator*fraction2.numerator + fraction1.numerator*fraction2.denominator;
end.reduction();
return end;
}
RNumber operator-(RNumber fraction1, RNumber fraction2)
{
RNumber end;
end.denominator = fraction1.denominator*fraction2.denominator;
end.numerator = fraction1.numerator*fraction2.denominator - fraction1.denominator*fraction2.numerator;
end.reduction();
return end;
}
RNumber operator*(RNumber fraction1, RNumber fraction2)
{
RNumber end;
end.denominator = fraction1.denominator * fraction2.denominator;
end.numerator = fraction2.numerator * fraction1.numerator;
end.reduction();
return end;
}
RNumber operator/(RNumber fraction1, RNumber fraction2)
{
RNumber end;
end.denominator = fraction1.denominator * fraction2.numerator;
end.numerator = fraction1.numerator * fraction2.denominator;
end.reduction();
return end;
}
#endif
主函数文件
#include<iostream>
#include"RNumber.h"
using namespace std;
int main()
{
RNumber fraction1;//分数运算左操作数
RNumber fraction2;//右操作数
char ch;//运算符
RNumber end;//结果
cout << "请输入表达式:";
cin >> fraction1>>ch>>fraction2;//cin>>fraction1调用重载>>运算符,>>fraction2调用重载运算符>>,给分数的分母分子相应的数
cout << fraction1 << ch << fraction2 << "=";//输出格式,调用重载<<运算符,以分数格式输出
switch (ch)
{
case '+':end = fraction1 + fraction2;//调用重载+
break;
case '-':end = fraction1 - fraction2;//调用重载-
break;
case '*':end = fraction1 * fraction2;//调用重载*
break;
case '/':end = fraction1 / fraction2;//调用重载/
break;
}
if (abs(end.getNumerator()) % abs(end.getDenominator()) == 0)//处理结果为整数的情况
{
cout << end.getNumerator() / end.getDenominator();
}
else
cout << end;//结果为分数
return 0;
}
...全文
相关推荐
fraction:分数运算,可避免部分小数带来的精度问题
fraction 分数运算,可避免部分小数带来的精度问题
分数加减混合运算 解决问题PPT学习教案.pptx
分数加减混合运算 解决问题PPT学习教案.pptx
六年级数学上期专项训练—分数混合运算解决问题精选.doc
六年级数学上期专项训练—分数混合运算解决问题精选.doc
六年级数学上册第六单元中国的世界遗产__分数四则混合运算两步分数乘法问题和简便运算第二课时教案青岛版六三制20200402280
六年级数学上册第六单元中国的世界遗产__分数四则混合运算两步分数乘法问题和简便运算第二课时教案青岛版六三制20200402280
六年级数学上册 五 分数四则混合运算 5.2 稍复杂的分数乘法实际问题(1)课件 苏教版.ppt
六年级数学上册 五 分数四则混合运算 5.2 稍复杂的分数乘法实际问题(1)课件 苏教版.ppt


