2009-07-12 11 views
7

Estoy trabajando con fracciones usando el módulo decimal de Python y me gustaría obtener solo la parte repetitiva de una cierta fracción. Por ejemplo: si tuviera 1/3 me gustaría obtener 3, si tuviera 1/7 me gustaría obtener 142857. ¿Hay alguna función estándar para hacer esto?¿Hay alguna manera de obtener la sección decimal repetitiva de una fracción en Python?

+4

Proyecto Euler n ° 26? – ChristopheD

+0

Sí, Project Euler n ° 26. –

+0

No estaba pidiendo una forma de resolver el problema, solo estaba preguntando si había una función que lo hizo (aparentemente no). –

Respuesta

0

Encuentra el primer número de la forma 10 ** k - 1 que se divide exactamente por el denominador de la fracción, divídelo por el denominador y multiplica por el numerador y obtienes la parte que se repite.

8

Dado que dar la respuesta podría ser un spoiler para proyecto euler (que generalmente no se hace aquí en stackoverflow), me gustaría dar esta pista: lea this (la sección 1.2 debe sonar una campana).

+0

es una pista muy buena sin spoiler, darse cuenta de lo que está pasando aquí es lo que hace de las matemáticas un ejercicio divertido – hansaplast

2

Sé que esta pregunta fue hace mucho tiempo, pero pensé que la gente probablemente aún buscaba algo así, así que pensé que mencionaría algunas cosas a tener en cuenta cuando lo haga, ya que intenté codificar y finalmente cambié de opinión. usando la división larga y descubriendo dónde ocurre la repetición cuando obtiene un resto después de dividirse en él. Originalmente estaba tratando de usar el método sugerido por Ants Aasma.

Estaba tratando de obtener un resultado como este para 1/7, ya que mi función estaba tratando de generar una cadena que podría utilizarse como respuesta a una pregunta; "0.142857 142857 ..."

Los decimales como 1/7 se encuentran muy fácilmente utilizando el método proporcionado por Ants Aasma, sin embargo, resulta doloroso cuando intenta algo como 1/35 - esto no se puede dividir en número lleno de 9s En primer lugar, cualquier denominador tendrá que tener factores de 10 divididos, es decir, dividir todos los 5 y 2, convirtiendo una fracción como 1/35 a 0.2/7

Por una fracción como 1/70 , Creo que la mejor manera es encontrar 1/7 y luego colocar un 0 justo después del lugar decimal. Para 1/35, conviértalo a 0.2/7 y luego a 2/7 con un 0 entre la parte que se repite y el lugar decimal.

Solo un par de consejos a tener en cuenta si se usa el método sugerido por Ants Aasma.

Cuestiones relacionadas