В десятичном представлении каждого рационального числа у p/qвас есть периодический хвост, непериодическая головка и раздел перед десятичной точкой в следующем формате:
(before decimal point).(non-periodic)(periodic)
Вот некоторые примеры:
1/70 = 0.0142857... = (0).(0)(142857)
10/7 = 1.428571... = (1).()(428571) ## no non-periodic part
1/13 = 0.076923... = (0).()(076923)
3/40 = 0.075 = (0).(075)() ## no periodic part
-2/15 = -0.13... = -(0).(1)(3) ## negative
75/38 = 1.9736842105263157894... = (1).(9)(736842105263157894)
## periodic part longer than float can handle
25/168 = 0.148809523... = (0).(148)(809523)
120/99 = 40/33 = 1.212121... = (1).()(21)
2/1 = 2 = (2).()() ## no periodic, no non-periodic
0/1 = 0 = (0).()()
0/2 = 0 = (0).()()
299/792 = 0.37752... = (0).(377)(52)
95/-14 = -6.7857142... = -(6).(7)(857142)
-95/-14 = 6.7857142... = (6).(7)(857142)
Задача состоит в том, чтобы поменять местами периодические и непериодические части, оставив before decimal pointодни, чтобы создать новое число. Например:
25/168 = 0.148809523... = (0).(148)(809523)
=> (0).(809523)(148) = 0.809523148148... = 870397/1080000
Если число не имеет периодической части, как, например, 0.25превратить это число в новое периодическое число, и наоборот.
1/4 = 0.25 = (0).(25)() => (0).()(25) = 0.252525... = 25/99
4/9 = 0.444444... = (0).()(4) => (0).(4)() = 0.4 = 2/5
5/1 = 5 = (5).()() => (5).()() = 5 = 5/1
Соревнование
- Возьмите дробь в
xкачестве ввода, в виде строки, двух входных данных, рационального числа или любого другого метода, который подходит вашему языку. - Поменяйте местами периодические и непериодические части десятичного представления,
xчтобы создать новое число, оставив часть перед одним десятичным знаком. Периодическая часть всегда начинается как можно скорее, поэтому непериодическая часть должна быть как можно короче. Примеры ниже. - Вернуть поменяемый номер как новую дробь. Ввод не обязательно уменьшается, хотя выход должен быть. Входной формат может отличаться от выходного формата.
- Числитель
pизxбудет целым с абсолютным значением одного миллиона или меньше , и знаменателемqвxбудет отличен от нуля целого числа с абсолютным значением одного миллиона или меньше. - Числитель
rи знаменательsрезультата не гарантированно будут меньше одного миллиона. Учитывая длину периодических частей этих чисел, рекомендуется избегать прямого преобразования в числа с плавающей точкой. - Это код гольф. Кратчайший ответ в байтах побеждает.
Примеры
1/70 = (0).(0)(142857) => (0).(142857)(0) = (0).(142857)() = 0.142857 = 142857/1000000
10/7 = (1).()(428571) => (1).(428571)() = 1.428571 = 1428571/1000000
1/13 = (0).()(076923) => (0).(076923)() = 0.076293 = 76923/1000000
3/40 = (0).(075)() => (0).()(075) = 0.075075... = 75/999 = 25/333
-2/15 = -(0).(1)(3) => -(0).(3)(1) = -0.311111... = -28/90 = -14/45
75/38 = (1).(9)(736842105263157894)
=> (1).(736842105263157894)(9) = (1).(736842105263157895)() ## since 0.999... = 1
= 1.736842105263157895 = 1736842105263157895/1000000000000000000
= 347368421052631579/200000000000000000
25/168 = (0).(148)(809523) => (0).(809523)(148) = 0.809523148148... = 870397/1080000
120/99 = (1).()(21) => (1).(21)() = 1.21 = 121/100
2/1 = (2).()() => (2).()() = 2 = 2/1
0/1 = (0).()() => (0).()() = 0 = 0/1
0/2 = (0).()() => (0).()() = 0 = 0/1
299/792 = (0).(377)(52) => (0).(52)(377) = 0.52377377... = 2093/3996
95/-14 = -(6).(7)(857142) => -(6).(857142)(7) = -6.857142777... = -12342857/1800000
-95/-14 = (6).(7)(857142) => (6).(857142)(7) = 6.857142777... = 12342857/1800000
1/7может быть представлена в виде , (0).()(142857) или (0).(1)(428571), 1может быть представлена в виде (1).()(), (0).()(9), (0).()(99), (0).(9)(9)и т.д.
0в конце теста 2 (10/7):1428571/100000должно быть1428571/1000000.