문제
수학을 좋아하는 서연이는 오늘 순환소수를 기약분수로 나타내는 방법을 배웠다. 이것을 프로그램으로 코딩할 수 있을까?
순환 소수를 분수로 나타내는 방법은 주어진 순환소수를 D라 하고, D에서 소수점이하 순환하지 않는 부분의 길이를 x, 순환 마디의 길이를 y라 할 때, 두 가지 방법으로 나누어 생각할 수 있다.
1. x = 0인 경우
1) D의 양변에 10y 를 곱한 식을 구한다.
2) 구한 식에서 D식을 변변 뺀다.
3) 양변을 D의 계수로 나눈 분수식을 구한다.
< 예 >
D = 0.333... (x=0, y=1) ---> ① //소숫점 이하에서 바로 순환이 시작된다.
10*D = 3.333... ---> ② // 양변에 101 = 10을 곱한 식을 구한다.
② - ①하면
10*D - D = 3.333... - 0.333
9*D = 3
D = 3/9 = 1/3 (분자 = 1, 분모 = 3)
2. x > 0인 경우
1) D의 양변에 10x 를 곱한 식을 구한다. ---> ①
2) D의 양변에 10(x+y) 를 곱한 식을 구한다. ---> ②
3) ②식에서 ①식을 변변 빼준다.
4) 양변을 D의 계수로 나눈 분수식을 구한다.
< 예 >
D = 0.01838383... (x=2, y=2)
10000*D = 183.838383... ---> ①
100*D = 1.838383... ---> ②
② - ①하면
10000*D - 100*D = 183.838383... - 1.838383...
9900*D = 182 D = 182/9900 = 91/4950 (분자 = 91, 분모 = 4950)
입력
하나의 행에 순환 소수 D가 주어진다. D(0 < D < 1)
D에서 순화되는 부분은 정확히 3번 반복되어 주어진다.
순환하지 않는 부분의 길이 x와 순환하는 부분의 길이 y에 대하여 x + 3y <= 15 이다.
출력
예제 #1
0.222
2
9
예제 #2
0.252525
25
99
예제 #3
0.123123123
41
333
예제 #4
0.1222
11
90
예제 #5
0.8161616
404
495