1.2Дроби: вычитание
стандартный ввод
стандартный вывод
2 секунды
64 мегабайта
----------------------------------------------------------------------------------------------------------------
Условие:
Даны две дроби ab и cd. Найдите их разность.
Для решения этой задачи перегрузите операцию вычитания в классе Fraction.
-----------------------------------------------------------------------------------------------------------------
Формат входных данных
В первой строке даются два целых числа a и b, разделенные символом «/» (∣∣a∣∣,∣∣b∣∣≤109, b≠0).
Во второй строке даются два целых числа c и d, разделенные символом «/» (∣∣c∣∣,∣∣d∣∣≤109, d≠0).
------------------------------------------------------------------------------------------------------------------
Формат выходных данных
Выведите числитель и знаменатель через символ «/». Дробь сокращать не обязательно (но можно). Числитель и знаменатель дроби не должны превышать 2⋅1018 по абсолютному значению.
входные данныевыходные данные
2/3
1/2 1/6
--------------------------------------------------------
1/1
1/1 0/1
--------------------------------------------------------
6/-5
-5/6 11/-30
Буду крайне благодарен
C/C++
Пожалуйста, решите, времени не хватает, а сдавать надо скоро
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class Fraction {
public:
using value_type = long long;
Fraction(const string& str) {
val = split(str, '/');
normalize();
}
string value() {
return to_string(val.first) + '/' + to_string(val.second);
}
private:
pair<value_type, value_type> val;
void normalize() {
auto x = gcd(val);
if (x) {
val.first /= x;
val.second /= x;
if (val.second < 0) {
val.first *= -1;
val.second *= -1;
}
}
}
value_type gcd(pair<value_type, value_type> v) {
v.first = abs(v.first);
if (v.first) {
v.second = abs(v.second);
while (v.first != v.second) {
if (v.first > v.second) swap(v.first, v.second);
v.second -= v.first;
}
}
return v.first;
}
pair<value_type, value_type> split(const string& str, char delim) {
stringstream ss(str);
string token;
pair<value_type, value_type> box;
getline(ss, token, delim);
box.first = stoll(token);
getline(ss, token);
box.second = stoll(token);
return box;
}
friend Fraction operator-(const Fraction& a, const Fraction& b) {
const auto an = a.val.first * b.val.second;
const auto bn = b.val.first * a.val.second;
const auto abn = an - bn;
const auto abd = a.val.second * b.val.second;
return Fraction(to_string(abn) + '/' + to_string(abd));
}
};
int main() {
string a, b;
cin >> a >> b;
Fraction fa(a), fb(b);
auto fc = fa - fb;
cout << fc.value() << '\n';
system("pause > nul");
}
#include <string>
#include <sstream>
using namespace std;
class Fraction {
public:
using value_type = long long;
Fraction(const string& str) {
val = split(str, '/');
normalize();
}
string value() {
return to_string(val.first) + '/' + to_string(val.second);
}
private:
pair<value_type, value_type> val;
void normalize() {
auto x = gcd(val);
if (x) {
val.first /= x;
val.second /= x;
if (val.second < 0) {
val.first *= -1;
val.second *= -1;
}
}
}
value_type gcd(pair<value_type, value_type> v) {
v.first = abs(v.first);
if (v.first) {
v.second = abs(v.second);
while (v.first != v.second) {
if (v.first > v.second) swap(v.first, v.second);
v.second -= v.first;
}
}
return v.first;
}
pair<value_type, value_type> split(const string& str, char delim) {
stringstream ss(str);
string token;
pair<value_type, value_type> box;
getline(ss, token, delim);
box.first = stoll(token);
getline(ss, token);
box.second = stoll(token);
return box;
}
friend Fraction operator-(const Fraction& a, const Fraction& b) {
const auto an = a.val.first * b.val.second;
const auto bn = b.val.first * a.val.second;
const auto abn = an - bn;
const auto abd = a.val.second * b.val.second;
return Fraction(to_string(abn) + '/' + to_string(abd));
}
};
int main() {
string a, b;
cin >> a >> b;
Fraction fa(a), fb(b);
auto fc = fa - fb;
cout << fc.value() << '\n';
system("pause > nul");
}
Ну показывай свой класс Fraction
Похожие вопросы
- Помогите, пожалуйста, задачу решить, времени не хватает, буду благодарен
- Помогите пожалуйста решить задачу на языке С#.
- Помогите, пожалуйста решить на C++, используя многомерные статические массивы
- Помогите пожалуйста решить задачу по с++
- Помогите пожалуйста решить задачу на Си
- Программирование С++. Помогите, пожалуйста, решить задачу.
- Помогите пожалуйста решить задачку по C++, напишите полный текст кода пожалуйста
- Пожалуйста решите задачу на с++
- Помогите, пожалуйста, решить задачу.
- Помогите, пожалуйста, решить.