分数类的四则运算【C++】
时间: 1ms 内存:128M
描述:
编写分数类Fraction,实现两个分数的加、减、乘和除四则运算。主函数已给定。
输入:
每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束。
输出:
空格分隔的两个分数的减和除的结果。
示例输入:
1 2 -1 2
4 3 3 4
0 0 0 0
示例输出:
1 -1
7/12 16/9
提示:
参考答案(内存最优[1268]):
#include <iostream>
using namespace std;
int cishu=1;
class Fraction
{
public:
Fraction(){fenzi=0;fenmu=0;}
Fraction(int x,int y){fenzi=x;fenmu=y;}
Fraction operator - (Fraction &k2);
friend istream & operator >>(istream &,Fraction&);
Fraction operator / (Fraction &k1);
friend bool operator == (Fraction &k1,int no);
void output();
private:
int fenzi;
int fenmu;
};
istream & operator >>(istream &input,Fraction&k)
{
input>>k.fenzi>>k.fenmu;
return input;
}
bool operator == (Fraction &k1,int no)
{
if(k1.fenzi==no&&k1.fenmu==no)
return true;
else
return false;
}
Fraction Fraction::operator-(Fraction &k2)
{
return Fraction(fenzi*k2.fenmu-k2.fenzi*fenmu,fenmu*k2.fenmu);
}
Fraction Fraction::operator / (Fraction &k1)
{
return Fraction(fenzi*k1.fenmu,fenmu*k1.fenzi);
}
void Fraction::output()
{
int t,r,u,v;
u=fenmu;
v=fenzi;
if(v>u){t=u;u=v;v=t;}
while((r=u%v)!=0)
{
u=v;
v=r;
}
fenzi/=v;
fenmu/=v;
if(fenmu<0)
{
fenzi=0-fenzi;
fenmu=0-fenmu;
}
if(fenmu==-1)
cout<<0-fenzi;
else if(fenmu==1)
cout<<fenzi;
else
cout<<fenzi<<"/"<<fenmu;
if(cishu%2!=0)
cout<<" ";
cishu+=1;
}
int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
参考答案(时间最优[0]):
#include <iostream>
using namespace std;
int cishu=1;
class Fraction
{
public:
Fraction(){fenzi=0;fenmu=0;}
Fraction(int x,int y){fenzi=x;fenmu=y;}
Fraction operator - (Fraction &k2);
friend istream & operator >>(istream &,Fraction&);
Fraction operator / (Fraction &k1);
friend bool operator == (Fraction &k1,int no);
void output();
private:
int fenzi;
int fenmu;
};
istream & operator >>(istream &input,Fraction&k)
{
input>>k.fenzi>>k.fenmu;
return input;
}
bool operator == (Fraction &k1,int no)
{
if(k1.fenzi==no&&k1.fenmu==no)
return true;
else
return false;
}
Fraction Fraction::operator-(Fraction &k2)
{
return Fraction(fenzi*k2.fenmu-k2.fenzi*fenmu,fenmu*k2.fenmu);
}
Fraction Fraction::operator / (Fraction &k1)
{
return Fraction(fenzi*k1.fenmu,fenmu*k1.fenzi);
}
void Fraction::output()
{
int t,r,u,v;
u=fenmu;
v=fenzi;
if(v>u){t=u;u=v;v=t;}
while((r=u%v)!=0)
{
u=v;
v=r;
}
fenzi/=v;
fenmu/=v;
if(fenmu<0)
{
fenzi=0-fenzi;
fenmu=0-fenmu;
}
if(fenmu==-1)
cout<<0-fenzi;
else if(fenmu==1)
cout<<fenzi;
else
cout<<fenzi<<"/"<<fenmu;
if(cishu%2!=0)
cout<<" ";
cishu+=1;
}
int main()
{
Fraction f1,f2,f3;
while(cin>>f1>>f2)
{
if(f1==0&&f2==0)
break;
f3=f1-f2;
f3.output();
f3=f1/f2;
f3.output();
cout<<endl;
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
