У десятковому поданні кожного раціонального числа у 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.