우리는 합리적인 숫자가 십진수로 쓰여질 때마다 결과가 종료되거나 (결과적으로) 주기적이라는 것을 알고 있습니다. 예를 들어 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...유효하지 않은 입력 : (첫 번째주기 숫자는0in 으로 간주 될 수 있음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?