根据客户代码定义分数类并实现两个分数相加,使得程序输出结果如要求(注意相加结果是化简形式)。
输入输出示例
输入 | 输出 | |
示例 1 | |
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
int gcd(int x, int y) //求最大公约数
{
int temp;
if (x < y)
{
temp = y;
y = x;
x = temp;
}
if (x == y)return x;
return gcd(y, x - y);
}
int gbs(int n, int m)
{
return n * m / gcd(n, m);
};
class Fraction {
public:
Fraction(int a, int b);
Fraction(Fraction& f);
void show();
Fraction add(Fraction& f);
private:
int n, m;
};
Fraction::Fraction(int a = 0, int b = 1)
{
n = a;
m = b;
}
Fraction::Fraction(Fraction& f)
{
n = f.n;
m = f.m;
}
void Fraction::show()
{
cout << n << "/" << m << endl;
}
Fraction Fraction::add(Fraction& f)
{
if (m == f.m)
{
n = n + f.n;
if (m % n == 0)
{
m = m / n;
n = 1;
}
}
else {
n = (n * (gbs(m, f.m) / m)) + (f.n * (gbs(m, f.m) / f.m));
m = gbs(m, f.m);
}
return *this;
};
int main()
{
Fraction f1(1, 10), f2(1, 10), sum;// f1,f2初始值为(1,10)代表1/10,sum 默认初始值为(0,1)代表0/1
sum.show();// 输出sum 形式为0/1
sum = f1.add(f2);//求和
sum.show();//输出sum,形式为1/5
Fraction f4(1, 5), f5(3, 8);
sum = f4.add(f5);//求和
sum.show();// 输出sum,形式为23/40
return 0;
}