分数运算问题

Never妥协 Never妥协 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
帮忙提供下思路,有点迷茫
在我的下面这个程序的基础下,不做大的改动,如何以以下两种输入求得分数运算结果,,

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;
}
...全文
评论 5
收藏 已收藏
分享
返回顶部
Never妥协
C++ 语言 65,214 成员 250,514 内容