14
丸められていない分数
分数を10進数に変換し、その数値を格納する場合、特定の量のメモリのみを使用するため、多くの場合、丸める必要があります。5桁の10進数しか保存できないとすると、5/3は1.6667になります。2桁の10進数しか保存できない場合は、1.7になります(常に0〜9.99の間にあると仮定します...)。 1.7でそのプロセスを逆にしようとして、端数を取り戻したい場合、1.7は丸められた数値にすぎないことがわかっているため、それは難しい場合があります。もちろん、17/10を試すこともできますが、それは「エレガントな」5/3と比べてかなり「ugい」部分です。 そのため、目標は、分母bが最小の分数a / bを見つけることです。これにより、正しく丸められたときに丸められた10進数が得られます。 詳細 入力には、0(含む)から10(含まない)の「。」の1から5桁までの数字の文字列が含まれます。最初の数字の後。n桁数を表すとしましょう。出力は[numerator, denominator]、分子が非負で分母が正である2つの整数のリスト/配列または合理的なデータ型(独自に作成するか、組み込みを使用できます)である必要があります。分数の分子/分母は、n数字(n-1小数点以下の数字を意味する)に正しく丸められる場合、入力と等しくなければなりません。 制限:許可されるループステートメントは1つだけです。つまり、コード全体で単一のループステートメント(foror whileまたはgotoetcなど、およびリスト/配列のすべての要素にコードを適用する、mapまたはfoldそのような機能ループ)のみを使用できますが、それを「乱用」することは自由ですまたは再帰などを使用します 関数を作成する必要があります。言語に関数がない場合(またはある場合でも)、入力が変数(またはstdin経由の入力)に格納されていると仮定して、結果を出力するか、ファイルに書き込むことができます。最も少ないバイト数が優先されます。 丸め 丸めは「従来の」丸め規則に従う必要があります。つまり、切り捨てられる最後の数字が5以上の場合、切り上げ、他の場合は切り捨てます。たとえば、 四捨五入すると4.5494になります 1桁:5 2桁:4.5 3桁:4.55 4桁:4.549 例 次のテストケースとその他の「興味深い」テストケースを含めてください。 Input 1.7 Output 5/3 Input 0. Output 0/1 Input 0.001 Output 1/667 Input 3.1416 Output 355/113