1000000/gcd(1000000,227273)
. Также известный как lcm(1000000,227273)/227273
. В этом случае 1 млн.
То, что вы хотите сделать, это превратить 0.227273 в дробь в простейшей форме. Число, которое вы ищете, является знаменателем этой дроби. Поскольку 227273/1000000 уже в простейшей форме, все готово. Но если ваш ввод был 100.075, то 75/1000 не в простейшей форме. Самая простая форма - 3/40, поэтому решение для X - 40.
В качестве оптимизации вы можете упростить вычисление, поскольку знаете, что начальный знаменатель является степенью 10, поэтому его единственные простые множители равны 2 и 5. Поэтому все, что вам нужно искать в числителе, - это делимость на 2 и 5, что проще, чем алгоритм Евклида. Конечно, если у вас уже есть реализация gcd и / или lcm, то это больше усилий с вашей стороны, а не меньше.
При получении результата помните, что числа с плавающей запятой в общем случае не могут точно представлять десятичные дроби. Поэтому, если у вас есть математически правильный ответ, он не обязательно обязательно даст вам целочисленный ответ при умножении с плавающей запятой. Обратной стороной этого является то, что, конечно, вопрос применим только в том случае, если существует конечное десятичное выражение интересующего вас числа.
Если у вас есть число как частное во-первых, то вам нужно найти знаменатель его простейшей формы напрямую, а не преобразовывать его в десятичную форму и усекать ее. Например, чтобы решить эту проблему для числа «6 и одна треть», ответ равен 3, а не любой степени 10. Если на входе «квадратный корень из 2», то для X нет решения.
Ну, на самом деле, наименьшее целое число X с требуемым свойством равно 0
, но я предполагаю, что вы не это имеете ввиду; -)