fundo
A tarefa é simples, mas todo programador a implementou pelo menos uma vez. O Stackoverflow possui muitas amostras, mas elas são curtas o suficiente para ganhar?
História do problema
Você é um programador mal-humorado que recebeu a tarefa de implementar a entrada de tamanho de arquivo para os usuários. Como os usuários não usam bytes, todos digitam "1M", "1K", "3G", "3,14M" - mas você precisa de bytes! Então você escreve um programa para fazer a conversão.
Em seguida, seu gerente entrega dezenas de relatórios de usuários com reclamações sobre números grandes e estranhos na entrada do tamanho do arquivo. Parece que você precisará codificar a conversão reversa também.
O que você precisa fazer?
Aqui está o truque: você deve implementar a conversão bidirecional em um único pedaço de código. Duas funções separadas usadas conforme necessário? Nah, isso é muito simples - vamos fazer um, um curto!
Para os propósitos deste desafio, "kilobyte" significa 1024 bytes, "megabyte" significa 1024 * 1024 = 1048576 bytes e "gigabytle" significa 1024 * 1024 * 1024 = 1073741824 bytes.
Dados de teste
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
Regras
- O valor do teste não excederá 2 * 1024 * 1024 * 1024 ou 2G
- Os seguintes postfixes são usados pelos usuários: K para kilobytes, M para megabytes, G para gigabytes
- O código não é necessário para trabalhar com números negativos
- Não use nenhuma biblioteca externa (por exemplo,
BCMathem PHP) além das que estão incluídas no pacote (por exemplomath.h) - As brechas padrão não são permitidas
- O código não deve produzir nada no stderr
- Seu programa pode receber e produzir resultados usando métodos padrão