Есть ли способ получить повторяющийся десятичный раздел дроби в Python? - PullRequest
7 голосов
/ 13 июля 2009

Я работаю с дробями, используя десятичный модуль Python, и я хотел бы получить только повторяющуюся часть определенной дроби. Например: если бы у меня было 1/3, я бы хотел получить 3, если бы у меня было 1/7, я бы хотел получить 142857. Есть ли какая-нибудь стандартная функция для этого?

Ответы [ 3 ]

12 голосов
/ 13 июля 2009

Поскольку предоставление ответа может быть спойлером для проекта euler (который обычно здесь не выполняется в stackoverflow), я хотел бы дать следующую подсказку: читайте this (раздел 1.2 должен звонить в колокольчик) .

1 голос
/ 02 января 2014

Я знаю, что этот вопрос был давным-давно, но я подумал, что люди, вероятно, все еще ищут что-то подобное, поэтому я решил упомянуть некоторые вещи, о которых следует помнить, делая это, так как я попытался написать код и в конце концов передумал использовать долгое деление и поиск места повторения, когда вы получаете остаток после деления на него. Сначала я пытался использовать метод, предложенный Антсом Аасмой.

Я пытался получить вывод, такой как этот, для 1/7, так как моя функция пыталась вывести строку, которую можно было бы использовать в качестве ответа на вопрос; «0.142857 142857 ...»

Десятичные дроби, такие как 1/7, очень легко найти с помощью метода, предоставленного Антсом Аасмой, однако это становится болезненным, когда вы пытаетесь что-то, например, 1/35 - это нельзя разделить на число, полное 9-х. Прежде всего, любые знаменатели должны иметь любые коэффициенты 10, то есть разделить все 5 и 2, преобразуя дробь, например, от 1/35 до 0,2 / 7

.

Для дроби, такой как 1/70, я считаю, что лучший способ - это найти 1/7, а затем поставить 0 после десятичного знака. Для 1/35 вы должны преобразовать его в 0,2 / 7, а затем в 2/7 с 0 между повторяющейся частью и десятичной точкой.

Просто пара советов, которые следует помнить при использовании предложенного Антсом Аасмой метода.

0 голосов
/ 13 июля 2009

Найдите первое число в форме 10 ** k - 1, которое делится точно на знаменатель дроби, разделите его на знаменатель и умножьте на числитель, и вы получите свою повторяющуюся часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...