バックグラウンド
タスクは単純ですが、すべてのプログラマーが少なくとも1回は実装しています。Stackoverflowには多くのサンプルがありますが、それらは勝つために十分短いですか?
問題の物語
あなたはユーザーのためにファイルサイズ入力を実装するタスクを与えられた不機嫌なプログラマーです。ユーザーはバイトを使用しないため、誰もが「1M」、「1K」、「3G」、「3.14M」と入力するだけですが、バイトが必要です。したがって、変換を行うプログラムを記述します。
次に、上司があなたに数十のユーザーレポートを渡して、ファイルサイズの入力に奇妙な多数が含まれているという苦情を受け取りました。逆変換もコーディングする必要があるようです。
あなたは何する必要があるの?
ここに秘訣があります。単一のコードで双方向変換を実装する必要があります。必要に応じて使用される2つの別個の関数?いや、それは単純すぎる-短いものを作ろう!
この課題では、「キロバイト」は1024バイト、「メガバイト」は1024 * 1024 = 1048576バイト、「ギガバイト」は1024 * 1024 * 1024 = 1073741824バイトを意味します。
テストデータ
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
ルール
- テスト値は2 * 1024 * 1024 * 1024または2Gを超えない
- 次の接尾辞がユーザーによって使用されます:Kはキロバイト、Mはメガバイト、Gはギガバイト
- 負の数を処理するためにコードは必要ありません
- (例えば任意の外部ライブラリを使用しないでください
BCMath同梱のもの以外にもPHPで)(例えばmath.h) - 標準の抜け穴は許可されていません
- コードはstderrで何も生成すべきではありません
- プログラムは、標準的な方法を使用して入力を取得し、出力を生成できます
1
通常、プログラムは変数の入出力を受け付けません...
—
TheDoctor
1024はキロバイト(k)ではありません。それはキビバイト(KiB)です。同様に、1048576はメガバイト(M)ではありません。それはメビバイト(MiB)です。
—
トッドリーマン、
10進数はいくつ必要ですか。1024 = 1k、1025 = 1.0 kまたは1k?1526398 = 1.45568656921 M ....
—
明るい