1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include <iostream>
using namespace std;
int gcd(int, int);
class rational
{
int num, den;
public :
rational(int num = 0, int den = 1) {}
void Fsum(int n, int d, int n1, int d1) { num = ((n * d1) + (n1 * d)) ; den = (d*d1); }
void Fsub(int n, int d) { num = ((num * d) - (den * n)); den *= d; };
void Fdiv(int n3, int den3) { int r; r = n3; n3 = den3; den3 = r; num *= n3; den *= den3; };
void Fmul(int n2, int d2) { num *= n2; den *= d2; };
void print() { cout << num << "\\" << den << "\n"; float n = num, d = den; cout << (n / d) << "\n"; }
friend void simp(rational&);
};
void simp(rational &R)
{
int F = gcd(R.num, R.den);
R.num = R.num / F;
R.den = R.den / F;
}
int gcd(int a, int b) {
if (b == 0){
return a;
}
return gcd(b, a % b);
}
void fill(int* n, int* d , bool& imp) {
imp = true;
for (int i = 0; i < 4; i++)
{
cin >> n[i] >> d[i];
if (d[i] == 0)
{
imp = false;
}
}
}
int main()
{
rational R;
bool imp;
int n[4], d[4];
fill(n, d , imp);
if (imp == false)
{
cout << "0\\0\n"<<"impossible";
return 0;
}
R.Fsum(n[0],d[0],n[1],d[1]);
simp(R);
R.Fmul(n[2],d[2]);
simp(R);
R.Fdiv(n[3],d[3]);
simp(R);
R.Fsub(n[0], d[0]);
simp(R);
R.print();
}
|