Torna alle sfide
Facile 0 risolte 0% di accettazione

Valore di un Numero Romano

Converti un numero romano in un numero intero.

Cosa imparerai

  • Associare simboli a valori con un dizionario
  • Gestire coppie sottrattive come IV e XC
  • Scorrere una stringa guardando il carattere successivo

Problema

Converti un numero romano valido nel suo valore numerico. I simboli sono I=1, V=5, X=10, L=50, C=100, D=500, M=1000; un simbolo più piccolo posto prima di uno più grande viene sottratto (IV = 4, CM = 900).

Implementa roman_to_int(text).

Input

text: Un numero romano valido.

Output

Restituisci il suo valore numerico.

Vincoli

1 ≤ valore ≤ 3.999

Esempi

Esempio 1
Input:
text = "XIV"

Output atteso:
expected = 14
Input:
std::string text = "XIV";

Output atteso:
long long expected = 14;
Input:
string text = "XIV";

Output atteso:
long expected = 14;

Spiegazione

X = 10, IV = 4: 14.

Esempio 2
Input:
text = "MCMXCIV"

Output atteso:
expected = 1994
Input:
std::string text = "MCMXCIV";

Output atteso:
long long expected = 1994;
Input:
string text = "MCMXCIV";

Output atteso:
long expected = 1994;

Spiegazione

M=1000, CM=900, XC=90, IV=4: 1994.

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

La maggior parte dei simboli si somma, ma alcune coppie sottraggono quando un simbolo più piccolo appare prima di uno più grande.

Suggerimento 2

Elabora il numerale da sinistra a destra e confronta ogni simbolo con il successivo.

Suggerimento 3

Assicurati di gestire sempre correttamente l'ultimo simbolo, perché non ha un successivo.

Complessità attesa

tempo O(n), spazio aggiuntivo O(1)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.