请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。
重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。
输入:
第一行的两个数 分别表示 第一个分数的分子和分母(分母不为0)。 第二行的两个数 分别表示 第二个分数的分子和分母。
输出:
第一个数表示分子,第二个数表示分母(若分数代表的是整数,则不输出分母)。
输入样例:
1 5
2 5
输出样例:
3 5
#include <bits/stdc++.h> using namespace std; class number { int fz,fm; friend number operator+(number &n1,number &n2); public: number(int a=0,int b=1) { fz=a; fm=b; } friend int gcd(int a,int b); friend int min_gb(number &n1,number &n2); int show() { cout<<fz; if(fm!=1) cout<<" "<<fm; //这里要注意空格和fz一起输出,如果分母为1,不需要输出空格,所以空格不能和fz一起输出 } }; int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } int min_gb(number &n1,number &n2) { return n1.fm*n2.fm/gcd(n1.fm,n2.fm); } number operator+(number &n1,number &n2) { number nn; int a=min_gb(n1,n2); nn.fm=a; nn.fz=(a/n1.fm)*n1.fz+(a/n2.fm)*n2.fz; int b=gcd(nn.fz,nn.fm); if(b!=1) { nn.fz=nn.fz/b; nn.fm=nn.fm/b; } return nn; } int main() { int a,b,c,d; cin>>a>>b>>c>>d; number num1(a,b); number num2(c,d); number num3; num3=num1+num2; num3.show(); }
题目描述:建立一个复数类,实数和虚数是其私有数据成员。建立一个>(大于号)的运算符重载,比较两个复数间模的大小。
输入格式:测试输入包含若干测试用例,每个测试用例占一行。每个测试用例包括四个数字,前两个数字分别表示第一个复数的实部和虚部,第三个和第四个数字分别表示第二个复数的实部和虚部。每个数字之间用空格间隔。当读入一个测试用例是0 0 0 0时输入结束,相应的结果不要输出。
输出格式:对每个测试用例输出一行。当第一个复数的模大于第二个复数的模时,输出 true ,当第一个复数的模小于或等于第二个复数的模时,输出false
输入样例:
3 5 4 0
0 3 4 1
0 0 0 0
输出样例:
true
false
#include<iostream>
#include<math.h>
using namespace std;
class Complex {
private:
double real;
double imag;
public:
Complex(double r = 0, double i = 0) {
real = r;
imag = i;
}
double modulus() {
double modulus;
modulus = sqrt(real *real + imag * imag);
return modulus;
}
bool friend operator>( Complex o,Complex p) {
double a = o.modulus();
double b = p.modulus();
if (a > b) {
return true;
}
else if (a <=b) {
return false;
}
}
};
int main() {
double a, b, c, d;
while(cin >> a >> b >> c >> d) {
if (a == 0 && b == 0 && c == 0 && d == 0)
break;
Complex p1(a, b);
Complex p2(c, d);
if (p1 > p2) {
cout << "true" << endl;
}
else {
cout << "false" << endl;
}
}
return 0;
}