题目要求如下:
--
---
------------------------------------------------------------------------------------------------------------------------------------------
代码如下:
/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作 者: 沈远宏
* 完成日期:2014 年 06月27日
* 版 本 号:v1.0
* 问题描述:Description
编写分数类Fraction,实现两个分数的加、减、乘和除四则运算。主函数已给定。
Input
每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束。
Output
空格分隔的两个分数的减和除的结果。
*/#include
using namespace std;
class Fraction
{
private:
int deno;//分母
int nume;//分子
int k;//整数部分
public:
void output();
void set(int de,int nu);
void simpilify();
friend istream& operator>>(istream& cin,Fraction &f);
friend Fraction operator+(Fraction f1,Fraction f2);
friend Fraction operator-(Fraction f1,Fraction f2);
friend Fraction operator*(Fraction f1,Fraction f2);
friend Fraction operator/(Fraction f1,Fraction f2);
friend bool operator==(Fraction f,int j);
};
void Fraction::output()
{
if(k==0)
{
cout<
}
else
{
cout<
}
}
void Fraction::set(int de,int nu)
{
deno=de;
nume=nu;
}
void Fraction::simpilify()
{
int t,r,x=nume,y=deno;
if(nume<0)x=-x;
if(deno<0)y=-y;
if(x
while(y!=0)
{ r=x%y;
x=y;
y=r;
}
deno=deno/x;
nume=nume/x;
if(deno<0)
{
deno=-deno;
nume=-nume;
}
if(nume==deno)
{
k=1;
}
else if(nume==(-deno))
{
k=-1;
}
else
{
k=0;
}
}
istream& operator>>(istream& cin,Fraction &f)
{
cin>>f.nume>>f.deno;
return cin;
}
Fraction operator+(Fraction f1,Fraction f2)
{
Fraction f3;
f3.deno=f1.deno*f2.deno;
f3.nume=f1.deno*f2.nume+f1.nume*f2.nume;
f3.simpilify();
return f3;
}
Fraction operator-(Fraction f1,Fraction f2)
{
Fraction f3;
f3.deno=f1.deno*f2.deno;
f3.nume=f1.nume*f2.deno-f1.deno*f2.nume;
f3.simpilify();
return f3;
}
Fraction operator*(Fraction f1,Fraction f2)
{
Fraction f3;
f3.nume=f1.nume*f2.nume;
f3.deno=f1.deno*f2.deno;
f3.simpilify();
return f3;
}
Fraction operator/(Fraction f1,Fraction f2)
{
Fraction f3;
f3.nume=f1.nume*f2.deno;
f3.deno=f1.deno*f2.nume;
f3.simpilify();
return f3;
}
bool operator==(Fraction f,int j)//
{
bool i=false;
if(f.deno==0&&f.nume==0)
{
i=true;
}
return i;
}
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<
}
return 0;
}
运行结果:
OJ要求结果输出例样: