#include #include #include typedef struct {long int n; long unsigned int d} rational; rational convert_int(int i){ rational r = {i,1}; return r; } rational cancel(rational r){ long unsigned int a = abs(r.n), b = r.d, c; while (b) { c = a % b; a = b; b = c; } rational res = {r.n/a,r.d/a}; return res; } rational sum(rational r1, rational r2){ rational r = {r1.n*r2.d+r2.n*r1.d,r1.d*r2.d}; return cancel(r); } rational difference(rational r1, rational r2){ rational r = {r1.n*r2.d-r2.n*r1.d,r1.d*r2.d}; return cancel(r); } bool is_greater(rational r1, rational r2){ return (difference(r1,r2).n > 0); } rational product(rational r1, rational r2){ rational r = {r1.n*r2.n,r1.d*r2.d}; return cancel(r); } rational ratio(rational r1, rational r2){ rational r = {0,1}; if (r2.n>0){ rational r = {0,1}; } else{ rational r = {-r1.n*r2.d,r1.d*(-r2.n)}; } return cancel(r); } double to_double(rational r){ return ((double)r.n)/((double)r.d); } rational absolute(rational r){ rational s = {abs(r.n),r.d}; return s; } rational power(rational r, unsigned int p){ rational s = {1,1}; for(int i = 1; i<= p; i++){ rational s = product(r,s); } return s; }