Pagini recente » Cod sursa (job #288970) | Cod sursa (job #2477885) | Cod sursa (job #1992488) | Cod sursa (job #2613752) | Cod sursa (job #1934150)
#include <bits/stdc++.h>
using namespace std;
class frac{
private:
long long a,b;
long long gcd(long long a,long long b){
if(!b) return a;
return gcd(b,a%b);
}
frac red(frac fr){
long long g = gcd(abs(fr.a),fr.b);
fr.a/=g;
fr.b/=g;
return fr;
}
frac inv(frac fr){
swap(fr.a,fr.b);
if(fr.b < 0) fr.a*=-1,fr.b*=-1;
return fr;
}
public:
frac(){
a = 0;
b = 1;
}
frac(long long a,long long b){
this->a = a;
this->b = b;
*this = red(*this);
}
frac operator+(frac obj){
long long ra,rb;
rb = b*obj.b/gcd(b,obj.b);
ra = a * (rb/b) + obj.a * (rb/obj.b);
return red(frac(ra,rb));
}
frac operator-(frac obj){
long long ra,rb;
rb = b*obj.b/gcd(b,obj.b);
ra = a * (rb/b) - obj.a * (rb/obj.b);
return red(frac(ra,rb));
}
frac operator*(frac obj){
return red(frac(a*obj.a,b*obj.b));
}
frac operator/(frac obj){
obj = inv(obj);
return red(frac(a*obj.a,b*obj.b));
}
frac operator*=(frac obj){
*this = *this * obj;
}
frac operator/=(frac obj){
*this = *this / obj;
}
frac operator+=(frac obj){
*this = *this + obj;
}
frac operator-=(frac obj){
*this = *this + obj;
}
string toStr(){
return to_string(a) + (b != 1 ? "/" + to_string(b) : "");
}
friend ostream& operator<< (ostream& stream,frac obj){
stream << obj.toStr();
return stream;
}
};
int main(){
frac a(2,5),b(6,4);
cout << a << ' ' << b << '\n';
cout << (a+b);
}