Я бы посоветовал хранить числитель и знаменатель отдельно. Лучше всего было бы создать новую структуру Fraction
для этой цели. Затем вы можете использовать евклидов алгоритм для вычисления наибольшего общего делителя. Имея эту информацию в руках, вы можете отформатировать свой результат.
string FormatFraction(int numerator, int denominator)
{
int gcd = Gcd(numerator, denominator );
numerator /= gcd;
denominator /= gcd;
return $"{numerator/denominator} {Math.Abs(numerator/denominator)}";
}
int Gcd(int numerator, int denominator)
{
int a = Math.Abs(numerator);
int b = Math.Abs(denominator);
while (b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
В этом примере кода предполагается, что вы используете версию c #, которая поддерживает интерполяцию строк ($ ""). Если нет, вы можете заменить последнюю строку фракции Format на конкатенацию строк.
Чтобы добавить две дроби a = a_1 / a_2
и b = b_1 / b_2
, вы можете использовать простую формулу a + b = c = c_1 / c_2 = a_1 * b_2 + a_2 * b_1 / a_2 * b_2