.. работующую прогу, которая по числу N показывает 1/N в виде десятичной дробью с циклам
[(1,"0.1"),
(2,"0.5"),
(3,"0.(3)"),
(4,"0.25"),
(5,"0.2"),
(6,"0.1(6)"),
(7,"0.(142857)"),
(8,"0.125"),
...
(17,"0.(0588235294117647)"),
...
(102,"0.009(8039215686274509)"),
(103,"0.(0097087378640776699029126213592233)"),
...
Нужно было для одной задачи на Эйлере.
Казалось бы, вроде понятно как делать. Берешь единицу, умножаешь на десять, смотришь - больше ли N, если нет, еще умножаешь на десять, и так далее, в конце концов, делишь целочисленно (quot), запоминаешь результат, а дальше то же самое опять с начала для остатка (mod), и останавливаешься на том моменте где и quot и mod совпадают с одним уже до этого встреченным, типа, нашли цикл, усе. А если нашли ноль, то типа цикла не будет.
Но с учетом чисто функциональных ограничений Хаскелла пришлось попотеть. Ничего, утешаю себя тем, что я только еще новичок в Хаскелле, со временем буду писать на нем быстро и легко.
ПС. Если кто знает, как искать циклы проще - пишите. Может, можно в десять раз проще.
[(1,"0.1"),
(2,"0.5"),
(3,"0.(3)"),
(4,"0.25"),
(5,"0.2"),
(6,"0.1(6)"),
(7,"0.(142857)"),
(8,"0.125"),
...
(17,"0.(0588235294117647)"),
...
(102,"0.009(8039215686274509)"),
(103,"0.(0097087378640776699029126213592233)"),
...
Нужно было для одной задачи на Эйлере.
Казалось бы, вроде понятно как делать. Берешь единицу, умножаешь на десять, смотришь - больше ли N, если нет, еще умножаешь на десять, и так далее, в конце концов, делишь целочисленно (quot), запоминаешь результат, а дальше то же самое опять с начала для остатка (mod), и останавливаешься на том моменте где и quot и mod совпадают с одним уже до этого встреченным, типа, нашли цикл, усе. А если нашли ноль, то типа цикла не будет.
Но с учетом чисто функциональных ограничений Хаскелла пришлось попотеть. Ничего, утешаю себя тем, что я только еще новичок в Хаскелле, со временем буду писать на нем быстро и легко.
ПС. Если кто знает, как искать циклы проще - пишите. Может, можно в десять раз проще.