#include<iostream>
#include<string>
#include<stdlib.h>
class Rational
{
public:
Rational(int num,int denom);
Rational operator+(Rational rhs);
Rational operator-(Rational rhs);
Rational operator*(Rational rhs);
Rational operator/(Rational rhs);
void print();
private:
void normalize();
int numerator;
int denominator;
};
Rational::Rational(int num,int denom)
{
numerator=num;
denominator=denom;
normalize();
}
//normalize对分数进行辗转求余简化操作;把负号移动到分子上
void Rational::normalize()
{
//确保分母为正
if(denominator<0)
{
numerator=-numerator;
denominator=-denominator;
}
//辗转求最小公项式
int a=abs(numerator);
int b=abs(denominator);
while(b>0)
{
int t=a%b;
a=b;
b=t;
}
numerator /=a;
denominator/=a;
}
//加减乘除部分
Rational Rational::operator+(Rational rhs)
{
int a=numerator;
int b=denominator;
int c=rhs.numerator;
int d=rhs.denominator;
int e=a*b+c*d;
int f=b*d;
return Rational(e,f);//用了除法函数
}
Rational Rational::operator-(Rational rhs)
{
rhs.numerator=-rhs.numerator;
return operator+(rhs);
}//这一段是个啥
Rational Rational::operator*(Rational rhs)
{
int a=numerator;
int b=denominator;
int c=rhs.numerator;
int d=rhs.denominator;
int e=a*c;
int d=rhs.denominator;//为什么声明两遍
int e=a*c;
int f=b*d;
return Rational(e,f);
}//这一段啥意思
Rational Rational::operator/(Rational rhs)
{
int t=rhs.numerator;
rhs.numerator=rhs.denominator;
rhs.denominator=t;
return operator*(rhs);
}
void Rational::print()
{
if(numerator%denominator==0)
std::cout<<numerator/denominator;
else
std::cout<<numerator<<"/"<<denominator;
}
int main()
{
Rational f1(2,16);
Rational f2(7,8);
Rational res=f1+f2;
f1.print();
std::cout<<"+";
f2.print();
std::cout<<"=";
res.print();
std::cout<<"\n";//加法运算
return 0;
}
程序未完成
1.加减乘除功能未完善
2.结构没搞懂
//白天再改,暂时记录