有理数が10進数で書かれているときはいつでも、結果は終了するか(最終的に)周期的であることを知っています。たとえば、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 =のように、有理数の末尾に10進数の展開がある場合0.25
、何も起こりません。あなたはどちらかと1/4の考えることができる0.250000000...
かのように0.249999999...
番号が変わらず、繰り返し部分の葉の最初の数字を削除するが、いずれの場合も。
詳細
- 入力は、分子と分母を表す正の整数のペアとして、または(選択する言語で許可され、必要な場合)何らかの種類の有理数オブジェクトとしての正の有理数です。
- 出力も有理数であり、どちらの形式でもあります。結果が整数の場合、有理数の代わりに整数を返します。
- 入力として数値のペアを使用する場合、それらは比較的素数であると想定できます。出力として数値のペアを生成する場合、それらを比較的素数にする必要があります。
- 繰り返しブロックを開始する最初の数字を見つけることに注意してください。たとえば、41/42と書くこともできます
0.97(619047)
が、これは2041/2100(10進数展開0.97(190476)
)を有効な答えにしません。 - あなたは、あなたが得る入力で、第1の周期の数字であると仮定してもよいの後になって、小数点
120/11
=10.909090909...
(その最初の定期的な数字が考えられる:無効な入力0
で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
か?