우리는 합리적인 숫자가 십진수로 쓰여질 때마다 결과가 종료되거나 (결과적으로) 주기적이라는 것을 알고 있습니다. 예를 들어 41/42를 10 진수로 쓰면 결과는 다음과 같습니다.
0.9 761904 761904 761904 761904 761904 761904 761904 ...
초기 자릿수 0.9
순서 761904
와 순서가 반복해서 반복됩니다. (이것에 대한 편리한 표기법 0.9(761904)
은 괄호가 반복 자릿수 블록을 둘러싸 는 곳입니다.)
이 과제의 목표는 양의 유리수를 취하고 반복 시퀀스의 일부인 첫 번째 숫자를 삭제 한 후 결과 유리수를 반환하는 것입니다. 예를 들어, 41/42로이 작업을 수행하면
0.9 61904 761904 761904 761904 761904 761904 761904 ...
또는 0.9(619047)
짧게 말하면 101/105입니다.
유리수에 1/4 =와 같이 종료 소수점 확장이 있으면 0.25
아무 일도 일어나지 않습니다. 1/4 0.250000000...
또는 1/4로 생각할 수 0.249999999...
있지만 두 경우 모두 반복 부분의 첫 번째 숫자를 삭제하면 숫자가 변경되지 않습니다.
세부
- 입력은 분자와 분모를 나타내는 양의 정수 쌍 또는 (선택한 언어에서 허용하고 원하는 경우) 일종의 유리수 객체로 양의 유리수입니다.
- 결과는 또한 어느 형식이든 합리적인 숫자입니다. 결과가 정수이면 유리수 대신 정수를 반환 할 수 있습니다.
- 한 쌍의 숫자를 입력으로 받아들이면 상대적으로 소수라고 가정 할 수 있습니다. 출력으로 한 쌍의 숫자를 생성하는 경우 상대적으로 소수 여야합니다.
- 반복 블록을 시작하는 첫 번째 숫자를 찾으십시오 . 예를 들어, 41/42를 쓸 수는
0.97(619047)
있지만 2041/2100 (소수점 확장0.97(190476)
)을 올바른 답으로 만들지는 않습니다 . - 당신이 얻는 입력에서 첫 번째주기 숫자는 소수점 뒤에 있다고 가정 하여
120/11
=10.909090909...
유효하지 않은 입력 : (첫 번째주기 숫자는0
in 으로 간주 될 수 있음10
). 그러한 입력에 대해 원하는 것을 할 수 있습니다. - 이것은 코드 골프입니다 . 가장 짧은 솔루션이 승리합니다.
테스트 사례
41/42 => 101/105
101/105 => 193/210
193/210 => 104/105
104/105 => 19/21
1/3 => 1/3
1/4 => 1/4
2017/1 => 2017/1
1/7 => 3/7
1/26 => 11/130
1234/9999 => 2341/9999
(2017,1)
.)
2/4
입력에서 발생할 수 있습니까?
120/11
정답 111/11
이거나 210/11
?
111/11
순간에 가장 고도로 찬성 한 답변이 반환된다는 것을 제외하고 말하고 싶습니다 210/11
. 기존 답변이 무효화되는 것을 피하도록 선택할 것입니다.
2017
대신에 돌아갈 수 있을까요2017/1
?