【毎日leetcode】ローマ数字回転整数

4249 ワード

ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.文字値I 1 V 5 X 10 L 50 C 100 D 500 M 1000は、例えば、ローマ数字2をIIと書くと、2つの並列の1となる.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊な規則は以下の6つの場合にのみ適用される:IはV(5)とX(10)の左側に置いて4と9を表すことができる.XはL(50)とC(100)の左側に置いて40と90を表すことができる.CはD(500)とM(1000)の左側に置いて400と900を表すことができる.ローマ数字を指定し、整数に変換します.入力は1~3999の範囲であることを確認します.例1:入力:「III」出力:3例2:入力:「IV」出力:4例3:入力:「IX」出力:9例4:入力:「LVIII」出力:58解釈:L=50、V=5、III=3.例5:入力:「MCMXCIV」出力:1994解釈:M=1000、CM=900、XC=90、IV=4.
言語:c++
class Solution {
public:
    int romanToInt(string s) {
        int n=0;
        for(int i=s.length()-1;i>=0;i--)
        {
            if(s[i]=='I')
                n=n+1;
            if(s[i]=='V')
            {
                if(s[i-1]=='I')
                    n=n+5-2;
                else
                    n=n+5;
            }
            if(s[i]=='X')
            {
                if(s[i-1]=='I')
                    n=n+10-2;
                else                    
                    n=n+10;
            }
            if(s[i]=='L')
            {
                if(s[i-1]=='X')
                    n=n+50-20;
                else
                    n=n+50;
            }

            if(s[i]=='C')
            {
                if(s[i-1]=='X')
                    n=n+100-20;
                else
                    n=n+100;
            }              
            if(s[i]=='D')
            {
                if(s[i-1]=='C')
                    n=n+500-200;
                else
                    n=n+500;
            }                
            if(s[i]=='M')
            {
                if(s[i-1]=='C')
                    n=n+1000-200;
                else
                    n=n+1000;
            }

        }
        return n;
    }
};