Ma fonction ressemble à ceci :
let romanToInt = romanNumber => {
if(typeof romanNumber !== 'string') throw new TypeError('L'argument doit être de type String');
const values = { 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000 };
let sum = 0;
romanNumber.split('').map(n => n.toUpperCase()).forEach(n => sum = (sum >= values[n]) ? sum + values[n] : values[n] - sum);
return sum;
}
console.log(romanToInt("MCMXCVI"));
La plupart des entrées sur lesquelles je teste sont correctes, mais le nombre romain MCMXCVI
par exemple, devrait me donner 1996
, et pas 2216
, ce que j'obtiens.
J'ai trouvé ceci, mais je ne suis pas sûr comment l'implémenter :
Vous devez séparer les unités, dizaines, centaines et milliers en tant qu'éléments séparés. Cela signifie que 99 est XCIX, 90 + 9, mais ne doit jamais être écrit comme IC. De même, 999 ne peut pas être IM et 1999 ne peut pas être MIM.