[CodeKata]Day5. ローマ数字から数字に変換


質問する


ローマ字から数字に変換
パラメータとして1~3999のアルファベットsを使用する場合は、対応する数値を返します.
ローマ数字を数字としてマークします.
Symbol       Value
I             1
V             5
X             10
L             50
C             100 
D             500
M             1000
ローマ字を数字で読む方法は、左からローマ字を順番に付けます.
III = 3
XII = 12
XXVII = 27
.
しかし表現4の場合はIIIではなくIV
後ろの数字から前の数字を引けばいいです
9はIXです.
VとXの前に来て、4、9
XはLとCの前40,90に来る
CはD,Mの前に来て,400,900

クレヨンしんちゃん

  • オブジェクトでローマ数字をキーとします:value宣言
  • 数字が
  • 本人の後に本人より大きい場合は、マイナス記号を行います.
  • の開始インデックスに基づいて、マイナス記号が必要な場合は、2つのスペースの後ろの文字からチェックを開始するか、次の文字を直接チェックします.
  • 結果

    function romanToNum(s) {
        const str = s;
        const t = {
        "I" : 1
        ,"V" : 5
        ,"X" : 10
        ,"L" : 50
        ,"C" : 100 
        ,"D" : 500
        ,"M" : 1000
    }
    let sum =0;
    let i = 0
    while (i<str.length){
        console.log(i);
        if( t[str[i+1]] > t[str[i]]){
            sum += t[str[i+1]]-t[str[i]];
            i++
        }else{
            sum += t[str[i]]; 
        }
        i++
    }
    return sum;
    }
    console.log(romanToNum("MCMXCIV"));
    学識
    一度は成功できず、最初はforゲートを1つずつ回し、後に小数が出てくるとその瞬間にリターンインしなければなりませんが、「MCMXCIV」の値が入ってくると満足できません.リセットして、ビット数の移動に焦点を当てます!考えました.
    //잘못 굴린 짱구
    function romanToNum(s) {
    let sum =0;
    for (let i in str){
        let index = parseInt(i);
        if( t[str[index+1]] &&  t[str[index+1]] > t[str[index]]){
            console.log(index,str[index], t[str[index]], t[str[index+1]]);
            sum+= t[str[index+1]]-t[str[index]];
            if(!t[str[index+2]]) {
                return sum;
            }
        }else{
            sum += t[str[index]];
        }
    }
    return sum;
    }
    console.log(romanToNum("MCMXCIV"));