不知道怎么错了
#include <iostream>
using namespace std;
class Rational{
private:
//int类型的私有数据成员numerator、denominator,表示分子、分母。
int numerator,denominator;
//私有成员函数gcd,用于求分子、分母的最大公约数。
int gcd(){
int x=numerator,y=denominator,t;
while(x%y){
t=y;
y=x%y;
x=t;
}
return y;
}
public:
//带默认参数的构造函数,将分子、分母设置为给定的参数。分、分母的默认参数值分别为0、1。
Rational(int tnumerator=0,int tdenominator=1){
numerator=tnumerator;
denominator=tdenominator;
}
//访问器函数getNumerator、getDenominator,分别用于访问分子、分母。
int getNumerator(){
return numerator;
}
int getDenominator(){
return denominator;
}
//成员函数add、subtract、multiply、divide,实现有理数的+、-、×和÷运算。
Rational add(Rational &b){
int x=numerator,y=denominator;
Rational q((x*b.getDenominator()+b.getNumerator()*y),y*b.getDenominator());
retrun q;
}
Rational subtract(Rational &b){
int x=numerator,y=denominator;
Rational q(x*b.getDenominator()-b.getNumerator()*y,y*b.getDenominator());
retrun q;
}
Rational multiply(Rational &b){
int x=numerator,y=denominator;
Rational q(x*b.getNumerator(),y*b.getDenominator());
retrun q;
}
Rational divide(Rational &b){
int x=numerator,y=denominator;
Rational q(x*b.getDenominator(),y*b.getNumerator());
retrun q;
}
//成员函数equals,判断一个有理数与另一个有理数是否相等。如果相等,返回true,否则返回false。
bool equals(Rational &b){
int x=numerator,y=denominator;
if((x*b.getDenominator()*1.0)/(y*1.0*b.getNumerator())==1){
return true;
}
else{
return false;
}
}
//成员函数doubleValue,将有理数转换为浮点数。
double doubleValue(){
int x=numerator,y=denominator;
return (x*1.0)/(y*1.0);
}
//成员函数print,输出一个有理数。若分母为0,则输出“Inf”。
void print(){
if(denominator==0){
cout<<"Inf"<<endl;
}
else if(numerator==0){
cout<<"0"<<endl;
}
else if(denominator==numerator){
cout<<"1"<<endl;
}
else if(denominator==1){
cout<<numerator<<endl;
}
else{
cout<<numerator/this.gcd()<<"/"<<denominator/this.gcd()<<endl;
}
}
};
/*【描述】 分数: 10
有理数是由分子和分母组成的a/b形式的数,a是分子,b是分
母。例如,1/3、3/4和10/4等都是有理数。有理数不能以0为
分母,但可以以0为分子。整数a等价于有理数a/1。
有理数用于包含分数的精确运算。例如,
1/3=0.333333……,这个数是不能用浮点数精确表示,为了
得到精确的结果,必须使用有理数。
一个有理数可能有很多与其值相等的其他有理数,例如,
1/3=2/6=3/9=4/12。为简单起见,用1/3表示所有值等于
1/3的有理数。因此,需要对有理数进行优化,使分子和分母
之间没有公约数(1除外)。求分子和分母绝对值的最大公约
数,然后将分子和分母都除以此最大公约数,得到有理数的优
化表示形式。*/
/*【输入】
4/2 2/3
【输出】
2
2/3
8/3
4/3
4/3
3
a!=b
0.666667*/
int main() {
int x, y;
char ignore;
cin >> x >> ignore >> y;
Rational a(x, y);
cin >> x >> ignore >> y;
Rational b(x, y);
Rational c;
a.print();
b.print();
c = a.add(b);
c.print();
c = a.subtract(b);
c.print();
c = a.multiply(b);
c.print();
c = a.divide(b);
c.print();
cout << (a.equals(b) ? "a==b" : "a!=b") << endl;
cout << b.doubleValue() << endl;
return 0;
}