Вычислите сумму
двух правильных дробей a / b и c
/ d. Результат представьте в виде
несократимой дроби. Если в результате получается целое число, то выведите это единственное
число.
Вход. В
одной строке содержатся четыре натуральных числа a, b, c,
d – числители и знаменатели дробей.
Все числа не превышают 1000.
Выход. Выведите
числитель и знаменатель искомой дроби или целое число.
Пример
входа 1 |
Пример
выхода 1 |
1 2 1 4 |
3 4 |
|
|
Пример
входа 2 |
Пример
выхода 2 |
3 4 1 4 |
1 |
математика
Анализ алгоритма
Очевидно, что . Остается сократить результирующую дробь на их наибольший
общий делитель.
Реализация алгоритма
Функция gcd возвращает наибольший общий делитель чисел a и b.
int gcd(int
a, int b)
{
return (!b) ?
a : gcd(b,a % b);
}
Основная часть программы. Читаем входные данные.
scanf("%d %d %d %d",&a,&b,&c,&d);
Вычисляем результирующую дробь p / q.
p = a * d + c *
b;
q = b * d;
Вычисляем НОД числителя и знаменателя. Сокращаем дробь.
g = gcd(p,q);
p /= g; q /= g;
Выводим ответ. Если ответом является целое число (знаменатель
q равен 1), то выводим только
числитель.
if (q == 1) printf("%d\n",p);
else printf("%d
%d\n",p,q);
Реализация при помощи класса
#include <stdio.h>
class Fraction
{
private:
int a, b;
public:
Fraction(int
a = 1, int b = 1) : a(a), b(b) {};
void
ReadData(void)
{
scanf("%d
%d",&a,&b);
}
static int gcd(int a, int b)
{
return (!b)
? a : gcd(b,a % b);
}
Fraction operator+(const Fraction &f)
{
int p = this->a * f.b + f.a * this->b;
int q = this->b * f.b;
int d =
gcd(p,q);
return
Fraction(p/d,q/d);
}
void Print()
{
if (b == 1)
printf("%d\n",a);
else
printf("%d %d\n",a,b);
}
};
int main(void)
{
Fraction a, b, c;
a.ReadData();
b.ReadData();
c = a + b;
c.Print();
return 0;
}
Читаем входные
данные.
a, b, c, d = map(int, input().split())
Вычисляем
результирующую дробь p / q.
p = a * d + c * b
q = b * d
Вычисляем НОД
числителя и знаменателя. Сокращаем дробь.
g = math.gcd(p, q)
p //= g
q //= g
Выводим ответ.
Если ответом является целое число (знаменатель q равен 1), то выводим только числитель.
if q == 1: print(p)
else: print(p, q)