1000000/gcd(1000000,227273)
. También conocido como lcm(1000000,227273)/227273
. En este caso, 1 millón.
Lo que quiere hacer es convertir 0.227273 en una fracción en su mínima expresión. El número que estás buscando es el denominador de esa fracción. Como el 227273/1000000 ya está en su forma más simple, listo. Pero si su entrada fue 100.075, entonces 75/1000 no está en la forma más simple. La forma más simple es 3/40, por lo que la solución para X es 40.
Como una optimización, se puede simplificar el cálculo, porque usted sabe que el denominador de partida es una potencia de 10, por lo que sus únicos factores primos son 2 y 5. Entonces, todo lo que necesita buscar en el numerador es la divisibilidad entre 2 y 5, que es más fácil que el algoritmo de Euclides. Por supuesto, si ya tienes una implementación de gcd y/o lcm, entonces esto es más esfuerzo de tu parte, no menos.
Tenga en cuenta cuando obtenga el resultado, que los números de coma flotante no pueden en general representar fracciones decimales con precisión. Así que una vez que tenga la respuesta matemáticamente correcta, no será necesariamente le dará una respuesta entera cuando realice una multiplicación de coma flotante. La otra cara de esto es que, por supuesto, la pregunta solo se aplica si hay una expresión decimal finita del número que le interesa.
Si tiene el número como cociente en primer lugar, entonces necesita encuentra el denominador de su forma más simple directamente, no convirtiéndola a decimal y truncándola. Por ejemplo, para resolver este problema para el número "6 y un tercio", la respuesta es 3, no cualquier potencia de 10. Si la entrada es "la raíz cuadrada de 2", entonces no hay solución para X.
Bueno, en realidad, el entero X pequeño con la característica que necesita es 0
, pero supongo que no quieres decir que ;-)
¿Realmente quiere decir decimal o de coma flotante? –
La representación no importa, al menos no para mí. – Davorin