소수를 분수로

면접 대비

시간 제한1초메모리 제한128 MB

요약
소수점 아래에 순환마디가 괄호로 주어질 수 있는 소수를 정확한 기약분수로 바꾼다.
난이도

보통10점 중 5점

유형
수학, 정수론, 문자열, 구현
정답자
아직 제출이 없습니다

문제

유리수를 소수로 나타내면 두 가지 경우가 있다. 소수점 아래 자릿수가 유한한 경우(예: 1/8=0.1251/8 = 0.125)와, 어떤 자리부터 일정한 숫자열이 끝없이 되풀이되는 경우(예: 1/11=0.090909…1/11 = 0.090909\ldots)이다.

소수를 입력받아 이를 기약분수로 나타내는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스의 개수는 100100을 넘지 않는다. 이어지는 각 줄에 소수가 하나씩 주어진다.

각 소수는 항상 0.으로 시작한다. 그 뒤에 숫자가 00개에서 66개까지 이어지고, 그다음에 괄호로 감싼 수가 올 수도 있다. 괄호 안의 수는 길이가 11 이상 99 이하이며, 그 부분이 무한히 반복됨을 뜻한다.

주어지는 소수에는 항상 00이 아닌 숫자가 하나 이상 있으며, 괄호 안의 수는 모두 00이거나 모두 99인 경우는 없다.

출력

각 테스트 케이스마다 주어진 소수를 분수로 나타내어 한 줄에 출력한다. 분자와 분모는 서로소(기약분수)이어야 한다.

예제4

  1. 예제 1

    입력
    3
    0.5
    0.(3)
    0.6(142857)
    
    예상 출력
    1/2
    1/3
    43/70
    
  2. 예제 2

    입력
    5
    0.1
    0.25
    0.125
    0.2
    0.123456
    
    예상 출력
    1/10
    1/4
    1/8
    1/5
    1929/15625
    
  3. 예제 3

    입력
    4
    0.(1)
    0.(142857)
    0.(6)
    0.(12)
    
    예상 출력
    1/9
    1/7
    2/3
    4/33
    
  4. 예제 4

    입력
    4
    0.1(6)
    0.16(6)
    0.583(3)
    0.0(3)
    
    예상 출력
    1/6
    1/6
    7/12
    1/30