Hintergrund
Die Aufgabe ist einfach, aber jeder Programmierer hat sie mindestens einmal implementiert. Stackoverflow hat viele Samples, aber sind sie kurz genug, um zu gewinnen?
Problemgeschichte
Sie sind ein mürrischer Programmierer, der die Aufgabe erhalten hat, die Eingabe der Dateigröße für die Benutzer zu implementieren. Da Benutzer keine Bytes verwenden, geben alle nur "1M", "1K", "3G", "3.14M" ein - aber Sie benötigen Bytes! Sie schreiben also ein Programm für die Konvertierung.
Dann übergibt Ihnen Ihr Manager Dutzende von Benutzerberichten mit Beschwerden über seltsam große Zahlen bei der Eingabe der Dateigröße. Es scheint, dass Sie auch die umgekehrte Konvertierung codieren müssen.
Was musst du tun?
Hier ist der Trick: Sie sollten die bidirektionale Konvertierung in einem einzigen Code implementieren. Zwei separate Funktionen nach Bedarf verwendet? Nein, das ist zu einfach - machen wir eins, kurz!
Für die Zwecke dieser Herausforderung bedeutet "Kilobyte" 1024 Bytes, "Megabyte" 1024 * 1024 = 1048576 Bytes und "Gigabyte" 1024 * 1024 * 1024 = 1073741824 Bytes.
Testdaten
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
Regeln
- Der Testwert wird 2 * 1024 * 1024 * 1024 oder 2G nicht überschreiten
- Die folgenden Postfixes werden von Benutzern verwendet: K für Kilobyte, M für Megabyte, G für Gigabyte
- Code ist nicht erforderlich, um mit negativen Zahlen zu arbeiten
- Verwenden Sie keine externen Bibliotheken (zB
BCMathin PHP) neben gebündelt diejenigen (zBmath.h) - Standardlücken sind nicht zulässig
- Code sollte auf stderr nichts erzeugen
- Ihr Programm kann nehmen Eingabe und erzeugen Ausgang mit Standardmethoden