#include <iostream>
#include <cmath>
using namespace std;
class fraction
{
private:
int m;
int n;
public:
fraction(){}
fraction(int, int);
int gcd(int, int);
fraction operator+(const fraction&);
fraction operator-(const fraction&);
void show();
};
fraction::fraction(int im, int in)
{
m = im;
n = in;
}
int fraction::gcd(int x, int y) //辗转相除法 如果不懂 可以自己找资料学习
{
if (y == 0)
{
return x;
}
else
{
return gcd(y, x % y);
}
}
fraction fraction::operator+(const fraction& b) //最基本的分数相加 分母相乘 分子分别乘以另一个分母 然后相加 最后除去最大公约数
{
fraction c;
int t;
c.m = b.n * m + n * b.m;
c.n = n * b.n;
if (fabs(c.m) > c.n)
{
t = gcd(fabs(c.m), c.n);
}
else
{
t = gcd(c.n, fabs(c.m));
}
c.m /= t;
c.n /= t;
return c;
}
fraction fraction::operator-(const fraction& b) //原理同上
{
fraction c;
int t;
c.m = b.n * m - n * b.m;
c.n = n * b.n;
if (fabs(c.m) > c.n)
{
t = gcd(fabs(c.m), c.n);
}
else
{
t = gcd(c.n, fabs(c.m));
}
c.m /= t;
c.n /= t;
return c;
}
void fraction::show() // 输出时应该考虑特殊情况 即0 和 1
{
if (m == 0)
{
cout << "0" << endl;
}
else if (m / n == 1 || m / n == -1)
{
cout << m / n << endl;
}
else
{
cout << m << "/" << n << endl;
}
}
int main()
{
fraction a(-1, 3), b(3, 12), c, d;
c = a + b;
d = a - b;
c.show();
d.show();
return 0;
}
面向对象部分_207
最新推荐文章于 2023-11-28 19:03:33 发布