0 / 0 / 0
Регистрация: 05.02.2018
Сообщений: 20
|
|
1 | |
Напишите программу, которая переводит правильную дробь в десятичную, выделив (если нужно), период дроби09.02.2018, 23:24. Показов 17113. Ответов 3
Метки нет (Все метки)
Напишите программу, которая переводит правильную дробь в десятичную, выделив (если нужно), период дроби.
Входные данные Входная строка содержит два числа M и N , разделённых пробелами. Гарантируется, что M < N . Выходные данные Программа должна вывести десятичную запись дроби , выделив (если нужно) её период. В качестве разделителя целой и дробной части используйте запятую. Примеры входные данные 1 2 выходные данные 0,5 входные данные 3 14 выходные данные 0,2(142857)
0
|
09.02.2018, 23:24 | |
Ответы с готовыми решениями:
3
По заданным M и N получить период дроби M/N, если дробь конечная, вывести 0 Написать программу, которая переводит числа с шестнадцатеричной системы в десятичную Составить программу, которая переводит число А, заданный в двоичной системе счисления в десятичную Напишите программу, которая переводит гривны в $ |
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
|
||||||
10.02.2018, 01:44 | 2 | |||||
Что-то вроде того
2
|
Модератор
10007 / 5364 / 3338
Регистрация: 17.08.2012
Сообщений: 16,342
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
11.02.2018, 01:22 | 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено ZX Spectrum-128 как решение
Решение
Hitoku, я даже и не знаю, что сказать... Не решение. 1/47, например?
Добавлено через 3 часа 5 минут Hitoku, гляди. Не оптимизировал. Алгоритм в общих чертах: Любая правильная или неправильная дробь представима в виде c,r(p), где с - целая часть, r - предпериод, p - период дроби. Например, 3/14=0,2142857142857142857...=0,2(142857): 0 - целая часть, 2 - предпериод, 142857 - период. Целая часть есть всегда, а вот есть ли предпериод и / или период - это нужно выяснять. Сразу выделяем и печатаем целую часть дроби, и сокращаем дробь. Теперь у нас есть дробь m/n, причём будем считать, что m < n, и m и n - взаимно простые (мы уже выделили целую часть дроби и сократили дробь). Вычисление десятичных цифр дроби, очевидный цикл: d = 10m div n - цифра, m = 10m mod n - остаток числителя для вычисления следующей цифры. О предпериоде. Выяснено, что длина предпериода равняется максимальной степени чисел вида 2p и 5q, которые делят знаменатель. В самом деле, если знаменатель представим в виде n=2p5qz, и пусть с=max(p, q), тогда Вычисляем длину предпериода и печатаем его. О периоде. Выяснено, что длина периода равна количеству разрядов числа, составленных из цифры 9, делящегося на z. Вычисляем длину периода и печатаем его. Конец алгоритма. Пример: 62/28. Целая часть: 62 div 28 = 2 - печатаем. Выделяем целую часть из дроби: 62 mod 28 = 6, получили правильную дробь 6/28. Сокращаем, НОД(6, 28)=2, получаем 3/14. Определяем длину предпериода: 14=21507, максимальная степень при 2 и 5 равна 1, значит, длина предпериода равна 1. Печатаем предпериод: d = 30 div 14 = 2 - двойку и печатаем, остаток числителя дроби m = 30 mod 14 = 2. вычисляем длину предпериода, выясняем, что 9, 99, 999, 9999, 99999 на z=7 не делятся, а 999999 делится. Следовательно, длина периода будет 6. Здорово, правда? Только вот есть подводный камень: длина периода может быть очень большой, и эти девятки ни в какой uint64 не влезут. Можно пойти экстенсивным путём, и применить тип BigInteger, но лучше делить по модулю z, умножая на 10 остаток от деления на z, и снова получать остаток от деления на z, пока остаток не станет равным 0, например, для этого случая:
Так, для сравнения, с девятками:
Остатки те же. Но в первом случае "что делим" не превосходит 10(z-1). Что получилось (для простоты писал для сдачи на проверочный сайт, без контроля ввода и интерфейса):
Проверка. Программа выдерживает прямое попадание дроби maxlongint/(maxlongint div 10)=2147483647/214748364, результат: 10,00(00000325962902329723918176158957839604310093836151413009134728495533497987 43984843581858439675936250671506861863683394579900035932287707672594888778756889 62175283440110398233348124598518478119814686923528786463770219921209737364984070 37922766200910382721239264015999674856661538990816246683956111535266457256922339 1150025245361124148075) Виндовый калькулятор нервно курит в сторонке, но как бы намекает, что всё верно: 10,000000032596290232972391817616 Ужос... Без применения деления по модулю для выяснения длины периода нужно было бы число из 336 девяток...
5
|
0 / 0 / 0
Регистрация: 15.12.2020
Сообщений: 1
|
|
15.12.2020, 00:26 | 4 |
Cyborg Drone, мужик ты просто гений, спасибо тебе за ответ, зарегался для этого, удачки)
0
|
15.12.2020, 00:26 | |
15.12.2020, 00:26 | |
Помогаю со студенческими работами здесь
4
Найти период разложения в бесконечную периодическую десятичную дробь Составить программу, которая для натуральных чисел m и n вычисляет период десятичной дроби m/n Напишите программу, которая переводит переданное ей целое число в двоичный код Напишите программу, которая переводит неотрицательное целое число в четырёхзначный шестнадцатеричную систему Даны две дроби A/B и C/D. Составить программу умножения дроби на дробь. Напишите программу, которая переводит переданное её целое число (возможно, отрицательное) в шестнадцатеричный код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |