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
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.
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.