C#

Программирование на С#

. Разработать функцию, которая для заданных натуральных чисел возвращает их
наибольший общий делитель. С помощью данной функции:
1) сократить дробь вида a/b;
2) найти наименьшее общее кратное для двух натуральных чисел;
3) вычислить значение выражения a/b + d/c ; результат представить в виде обыкновенной
дроби, выполнив сокращение;
4) найти наибольший общий делитель для n натуральных чисел.
using System;
namespace Answer {
class Program {
static void Main() {
var num = InputArgument("Числитель: ");
var den = InputArgument("Знаменатель: ");
var frac = new Fraction(num, den);
Console.WriteLine("После сокращения: " + frac);
var first = InputArgument("Первое натуральное число: ");
var second = InputArgument("Второе натуральное число: ");
Console.WriteLine($"Наименьшее общее кратное: {Framework.Lcm(first, second)}");
var a = InputArgument("a: ");
var b = InputArgument("b: ");
var ab = new Fraction(a, b);
var c = InputArgument("c: ");
var d = InputArgument("d: ");
var cd = new Fraction(c, d);
var sum = ab + cd;
Console.WriteLine(ab + " + " + cd + " = " + sum);
var n = InputArgument("n: ");
var box = new long[n];
for (var i = 0; i < n; ++i) box[i] = InputArgument($"Введите {i + 1}-е число: ");
if (n > 1) {
long gcd = Framework.Gcd(box[0], box[1]);
for (var i = 2; i < n; ++i) gcd = Framework.Gcd(gcd, box[i]);
Console.WriteLine($"Наибольший общий делитель: {gcd}");
}
Console.ReadKey();
}
static long InputArgument(string msg) {
long value;
do {
Console.Write(msg);
} while (!long.TryParse(Console.ReadLine(), out value));
return value;
}
}
struct Fraction {
private long numerator;
private long denominator;
public Fraction(long num, long den) {
numerator = num;
denominator = den;
Reduce();
}
public override string ToString() {
return numerator.ToString() + "/" + denominator.ToString();
}
public static Fraction operator+(Fraction a, Fraction b) {
var num = a.numerator * b.denominator + b.numerator * a.denominator;
var den = a.denominator * b.denominator;
return new Fraction(num, den);
}
private void Reduce() {
var n = Framework.Gcd(numerator, denominator);
if (n != 0) {
numerator /= n;
denominator /= n;
if (denominator < 0) {
numerator *= -1;
denominator *= -1;
}
}
}
}
public struct Framework {
public static long Gcd(long a, long b) {
a = Math.Abs(a);
if (a != 0) {
b = Math.Abs(b);
while (a != b) {
if (a > b) Swap(ref a, ref b);
b -= a;
}
}
return a;
}
public static long Lcm(long a, long b) {
return Math.Abs(a * b) / Gcd(a, b);
}
private static void Swap(ref long a, ref long b) {
var tmp = a;
a = b;
b = tmp;
}
}
}
ДШ
Диловар Шарифзода
94 095
Лучший ответ