Fractii

Se dau n perechi de numere naturale nenule, fiecare reprezentând câte o fracţie. Calculaţi suma celor n fracţii, aducând rezultatul la forma ireductibilă.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale, reprezentând numărătorul şi numitorul unei fracţii.

Date de ieşire

Programul afișează pe ecran numerele P Q, separate prin exact un spaţiu, reprezentând numărătorul şi numitorul fracţiei sumă, adusă la forma ireductibilă.

Restricţii şi precizări

  • 1 ≤ n ≤ 10
  • numărătorul şi numitorul fiecărei fracţii sunt numere naturale cu cel mult două cifre

Exemplu

Intrare

4
1 3
5 6
1 2
4 2

Ieșire

11 3
#include <bits/stdc++.h>

using namespace std;
int cmmdc(int n,int m)
{
    while(m != 0)
    {
        int r = n % m;
        n = m;
        m = r;
    }
    return n;
}
int cmmmc(int n,int m)
{
      return n*m/cmmdc(n,m);
}
pair<int,int> v[100];
int main()
{
    int n,a,b,c=1,d,s=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
          cin>>a>>b;
          c=cmmmc(c,b);
          v[i].first=a;
          v[i].second=b;
    }
    for(int i=0;i<n;i++)
    {
          v[i].first=v[i].first*c/v[i].second;
          s+=v[i].first;
    }
    d=cmmdc(s,c);
    s=s/d;
    c=c/d;
    cout<<s<<' '<<c;
    return 0;
}

SOLUTIA 2

#include <iostream>
using namespace std;

int main(){
    int n, a, b, p=0, q = 1;
    cin >> n;
    for(int i=1;i<=n;++i)
    {
        cin >> a >> b;
        p = a * q + b * p;
        q = b * q;
        int x = p, y = q, r;
        while(x % y != 0)
        {
            r = x % y;
            x = y;
            y = r;
        }
        p /= y, q /= y;
    }
    cout << p << " " << q; 
    return 0;
}