모든 유리수의 소수점 표시 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
.