Язык: C++Реализовать программку с форматированным определенным образом выводом. Допустим,

Язык: C++
Воплотить программку с форматированным определенным образом выводом. Допустим, выводим итог дробленья a на b:
Входные данные:
3 2
Вывод: 1.5
Входные данные:
8 9
Вывод: \frac89
По сущности: если получившееся число можно представить в виде десятичной дроби без периода, то выводим в виде десятичной. Если нет (например, 8/9=8,8(8)) - в виде обычной.

Задать свой вопрос
1 ответ

Привожу 2 варианта решения.

Вариант 1: файл 1.cpp

Решение основано на обычном вычислении периода дроби (для дробей, имеющих окончательную десятичную запись(к примеру, 1/2=0,5), период рассчитывается для формы с нулем в периоде(то есть для 1/2 берется форма 0,5(0))) с поддержкою деления столбиком.

Замечание: сам метод деления в столбик я писал довольно издавна, и для иных программ, поэтому его реализация в данном коде может быть неоптимальной (в плане памяти или кол-ва операций), но он работает.

Вариант 2: файл 3.cpp

Если немножко углубиться в арифметику, можно отыскать аксиому, по которой дробь, представленная в виде m/n , где НОД(m, n) = 1, имеет окончательную десятичную запись тогда и только тогда, когда ее знаменатель n = 5^a_1*2^a_2; a_1, a_2\in Z, a_1, a_2\geq0. Тогда довольно сократить числитель и знаменатель на общие множители, а дальше выполнить проверку знаменателя.

Ревелиоти Алина
они - числа
Dashka Singatulina
Также, в первом решении даже в экспоненциальной форме не выводится дробление 10 на 2^40. Данную делему я решил просто изменив типы данных главных переменных на long long. Но и этот вариант не проходит при делении 10 на 2^80, но размышляю это уже мелочи и в ближайшее время это не будет особо важным.
Алла Круцинская
Во втором решении 1 ошибка та же. Ну можно просто сделать просто дополнительную проверку при вводе. 2 ошибка тоже та же. Только здесь теснее ее так просто не поправить (ложным при 2^40 становится не ответ), при вводе данного значение не может инициализироваться массив (слишком большой).
Кирилл Картюх
значения*
Царукова Мария
Стек переполняется, видимо
Валерия
Я подумаю, можно ли это поправить без ввода строк и длинноватой математики. Пока что ничего в голову не идет
Валек
Да, по поводу 2^80 - вроде бы это теснее выход за пределы long long
Виталя Хоржевский
Да. long long - чуть больше, чем 9*10^18
Ванька Адлеров
Там будет около 25 цифр, а у long long не более 19
Ломджария Лилия
Ну, пока что еще не появлялось в задачках решений, требующих более, чем 10/2^40. Так что на данный момент первого решения довольно.
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт