Code CataDay 6

835 ワード

function romanToNum(s) {
const obj= {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000};
let sum = obj[s[s.length-1]];
for (let i=s.length-1; i>0; i--) {
  if (obj[s[i]] > obj[s[i-1]]) {
    sum -= obj[s[i-1]];
  }
  else {
    sum += obj[s[i-1]];
  }
}
  return sum ;
}
アルファベットを数字で読み取る方法では、デフォルトでは左の値が小さい場合、後ろの数字から前の数字を減算します.
上記の条件の下で、すべての字を1つずつ比較する必要があると思います.
なお、前が後より小さいのは後が前より大きいと解釈できる.
(これは、値を算出する際に、次の数を加算するのではなく、前の数を負数として扱うため、後の値から前の数を減算するのが簡単である)
変数を最後の変数として指定し、後のインデックスからループを開始します.
for (let i=s.length-1; i>0; i--) {
if (obj[s[i]] > obj[s[i-1]]) {
sum -= obj[s[i-1]];
}
else {
sum += obj[s[i-1]];
}
}