DEV Community

Bruno Almeida
Bruno Almeida

Posted on

Convertendo Números Romanos em Arábicos com c#

Um tempo atrás eu fiz uma entrevista para uma consultoria onde uma das etapas era um code challenge "ao vivo" com outra pessoa seguindo a dinâmica de eu ter que ir falando como eu iria construindo o raciocínio lógico da tarefa em questão.

Segue a minha resolução:

Minha linha de raciocínio foi dividida em 3 partes:

  • Começar como os casos mais simples, ou seja converter os números que representam uma letra só (ex: X é 10, V é 5).
  • Traduzir os números composto por duas letras em que os valores são somados (ex: XV é 15).
  • Converter os números cujo a ordem é subtrair o valor correspondente a letra ao invés de somar (ex: IV é 4)

Tendo quebrado o problema em problemas menores eu comecei por criar as coisas que eu iria precisar. E a primeira delas foi criar uma estrutura de "de para" do algarismos romanos para números. E foi o que eu fiz com o tipo Dictionary que me permite criar uma estrutura de chave-valor onde as chaves seriam os números romanos e os valores o números arábicos.

Então se eu quisesse o número 5 bastava eu pedir ao dicionário o valor da chave "V" e assim por diante.
Como os números romanos são na verdade letras eu resolvi transformar o algarismo romano digitado num array de chars assim eu poderia navegar sob eles e pegar um de cada vez. Por exemplo se o valor digitado fosse "XV" eu teria que percorrer essa string pra pegar primeiro X e depois o V.

Usando o for para percorrer o array até o final eu tenho 3 validações:

  • Na primeira eu valido se index usado para o controle do for é igual ao tamanho do array. Eu faço isso para poder saber se é a última ou a única posição do array. Se for eu recupero o numero referente a letra no dicionário e somo a uma variável que armazena o resultado final e termino o loop.
  • Se a primeira validação é falsa eu armazeno a número arábico correspondente em uma variável assim como o próximo valor depois deste. Ex: "XV" eu armazeno o valor correspondente de X e de V e as comparo.
  • Se o valor arábico do próximo algarismo romano for menor que o valor arábico do atual eu tenho que subtrair o mesmo da variável que guarda o resultado final. Caso contrário eu somo o valor atual a variável que guarda o resultado final.

Top comments (0)