题目描述
编写分数类Fraction,实现两个分数的加、减、乘和除四则运算。主函数已给定。
输入
每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束。
输出
空格分隔的两个分数的减和除的结果。
样例输入
1 2 -1 2
4 3 3 4
0 0 0 0
样例输出
1 -1
编写分数类Fraction,实现两个分数的加、减、乘和除四则运算。主函数已给定。
输入
每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束。
输出
空格分隔的两个分数的减和除的结果。
样例输入
1 2 -1 2
4 3 3 4
0 0 0 0
样例输出
1 -1
7/12 16/9
我的程序:
#include<iostream>
using namespace std;
class Fraction
{
private:
int a,b;
public:
friend istream& operator>>(istream&,Fraction&);
friend Fraction operator-(Fraction&,Fraction&);
friend Fraction operator/(Fraction&,Fraction&);
friend bool operator==(Fraction&,int);
void output();
};
istream & operator>>(istream &in,Fraction &c)
{
in>>c.a>>c.b;
return in;
}
Fraction operator-(Fraction &c1,Fraction &c2)
{
Fraction c3;
int temp,n,p,r,m;
c3.a=c1.a*c2.b-c1.b*c2.a;
c3.b=c1.b*c2.b;
n=c3.a;
m=c3.b;
if(n<m)
{
temp=n;n=m;m=temp;
}
p=m*n;
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
c3.a=c3.a/n;
c3.b=c3.b/n;
return c3;
}
Fraction operator/(Fraction &c1,Fraction &c2)
{
Fraction c3;
c3.a=c1.a*c2.b;
c3.b=c1.b*c2.a;
int temp,n,p,r,m;
n=c3.a;
m=c3.b;
if(n<m)
{
temp=n;n=m;m=temp;
}
p=m*n;
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
c3.a=c3.a/n;
c3.b=c3.b/n;
return c3;
}
bool operator==(Fraction &c1,int a)
{
a=0;
if(c1.a==a&&c1.b==a)
return 1;
else
return 0;
}
void Fraction::output()
{
if(a==b)
cout<<"1";
else if(a==(-b))
cout<<"-1";
else if((a>0&&b>0)||(a<0&&b<0))
cout<<a<<"/"<<b;
else if(a<0&&b>0)
cout<<"-"<<-a<<"/"<<b;
else
cout<<"-"<<a<<"/"<<-b;
}
int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
cout<<" ";
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
运行结果: