C++:运算符重载1(分数的加法)
2016-01-22 14:08
561 查看
运算符重载1(分数的加法)
Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal 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; }
相关文章推荐
- C语言实现strcmp
- C++:抽象类(圆与正方形)
- C++:多态性2(图形的面积)
- C语言实现strcpy
- C++:多态性1(动态联编测试)
- C语言实现strlen
- C语言学习之指针高级
- C语言学习之结构体等
- C语言学习之数组及指针
- C语言学习之函数
- C语言学习之switch语句
- UpdateLayeredWindow和SetLayeredWindowAttributes
- 用C++ 语言如何实现表达式拆分“1*2*3*(4+(5+6)*(7+8))+9”
- c、c++ 结构体的嵌套
- C语言 百炼成钢7
- Leetcode 27 - Remove Element
- 深入分析C++中char * 和char []的区别
- C++下如何更好的定义结构体
- 个人总结的一些C/C++编码规范
- C++之路进阶——AC自动机(单词)