您的位置:首页 > 编程语言 > C语言/C++

C++:运算符重载1(分数的加法)

2016-01-22 14:08 561 查看

运算符重载1(分数的加法)

Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte

Total Submit:330 Accepted:179

Description

设计一个分数类rationalNumber,该类中包括分子和分母两个成员数据,并具有下述功能:

(1)建立构造函数,它能防止分母为零(分母为0时,输出”denominator equal zero”),当分数不是最简形式时进行约分,并避免分母为负数。

(2)重载加法运算符。

Input

输入数据第一行为一个整数T,表示有T组数据。每组数据一行,包含四个整数,分别表示两个分数a,b的分子和分母:分子 分母 分子 分母。

Output

对于每一组数据,输出两个分数相加的结果,格式参照样例输出。

Sample Input

4

2 -4 1 4

2 -4 1 -2

2 -4 1 2

2 0 4 6

Sample Output

-1/2+1/4=-1/4

-1/2-1/2=-1

-1/2+1/2=0

denominator equal zero

代码块:

#include<iostream>
using namespace std;

int gcd(int a,int b)
{
int c;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int lcm(int a,int b)
{
if(b==0)
return a;
else
return a*b/gcd(a,b);
}

class rationalNumber
{
int molecule,denominator ;
public:
rationalNumber(int m=1,int d=1)
{
int c;
if (d==0)
cout<<"denominator equal zero"<<endl;
c=gcd(m,d);
if (c==0)
{
molecule=m;
denominator=d;
}
else
{
molecule=m/c;
denominator=d/c;
}
if (denominator<0)
{
denominator=-denominator;
molecule=-molecule;
}

}

friend rationalNumber operator+(rationalNumber&a,rationalNumber&b);

void disp()
{
int x=molecule%denominator;
int y=molecule/denominator;
if (x==0)
cout<<y;
else
cout<<molecule<<"/"<<denominator;
}
void disp1()
{
int x=molecule%denominator;
int y=molecule/denominator;
if (x==0)
cout<<y;
else cout<<molecule<<"/"<<denominator;
}
};
rationalNumber operator+(rationalNumber&a,rationalNumber&b)
{
int c;
c=lcm(a.denominator,b.denominator);

int x=a.molecule*c/a.denominator+b.molecule*c/b.denominator;

int y=c;
return rationalNumber(x,y)    ;
}

int main()
{
int a,b,c,d,n,i;
cin>>n;
for (i=0;i<n;i++)
{
cin>>a>>b>>c>>d;

rationalNumber a1(a,b),a2(c,d),a3,a4,a5,a6;
if (b==0||d==0)  continue;

a3=a1+a2;

a1.disp();

if(c*d<0)
a2.disp();
else
{
cout<<"+";a2.disp();}
cout<<"=";
a3.disp();
cout<<endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: