#include <bits/stdc++.h>
using namespace std;
class Fractional
{
public:
int Symbol = 1; //符号位。1代表正,-1代表负
int molecule;
int denominator;
int gcd(int a,int b){
return b == 0 ? a : gcd(b,a % b);
}
int lcm(int a,int b){
return a * b / gcd(a,b);
}
void simple(Fractional &ans){
if(ans.molecule < 0 && ans.denominator > 0 || ans.molecule > 0 && ans.denominator < 0){
ans.Symbol = -1;
}
ans.molecule = abs(ans.molecule);
ans.denominator = abs(ans.denominator);
ans.denominator /= gcd(ans.denominator,ans.molecule);
ans.molecule /= gcd(ans.denominator,ans.molecule);
}
Fractional operator +(const Fractional &A){
Fractional ans;
ans.molecule = A.molecule * denominator + A.denominator * molecule;
ans.denominator = A.denominator * denominator;
simple(ans);
return ans;
}
Fractional operator -(const Fractional &A){
Fractional ans;
ans.molecule = A.denominator * molecule - A.molecule * denominator;
ans.denominator = A.denominator * denominator;
simple(ans);
return ans;
}
Fractional operator *(const Fractional &A){
Fractional ans;
ans.denominator = A.denominator * denominator;
ans.molecule = A.molecule * molecule;
simple(ans);
return ans;
}
Fractional operator /(const Fractional &A){
Fractional ans;
ans.denominator = denominator * A.molecule;
ans.molecule = molecule * A.denominator;
simple(ans);
return ans;
}
};
int main()
{
Fractional A,B,ans;
A.denominator = 3, A.molecule = 2; // 2/3
B.denominator = -4, B.molecule = 1; // -1/4
ans = A+B;
if(ans.Symbol < 0) cout<<"-";
cout<< ans.molecule << "/" <<ans.denominator <<endl;
ans = A-B;
if(ans.Symbol < 0) cout<<"-";
cout<< ans.molecule << "/" <<ans.denominator <<endl;
ans = A*B;
if(ans.Symbol < 0) cout<<"-";
cout<< ans.molecule << "/" <<ans.denominator <<endl;
ans = A/B;
if(ans.Symbol < 0) cout<<"-";
cout<< ans.molecule << "/" <<ans.denominator <<endl;
return 0;
}
分数运算模板
最新推荐文章于 2023-06-24 22:57:45 发布