Roman to Integer

題目:
Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.
思路:
我們首先來明確一下羅馬數字與阿拉伯數字的換算規則:如果當前數字比前一個大,說明這一段的值應該是當前這個值減去上一個值,比如IV = 5 – 1;否則,將當前值加入到結果中,然後開始下一段記錄,比如VI = 5 + 1, II=1+1。而羅馬數字與阿拉伯數字對應變換是:I對應1,V對應5,X對應10,L對應50,C對應100,D對應500,M對應1000。因此,只需要從前往後讀出字符,如果當前數字小於等於前一字符,則加上當前字符對應的數字;而當前數字更大時,減去前一個字符(要減去兩倍,因爲在前面掃描時已經加上過一次了,實際上不應該加,因此要多減一次)。
代碼:

class Solution {
public:
    int romanToInt(string s) {

char c[10][10][10]={{"0","I","II","III","IV","V","VI","VII","VIII","IX"},
                    {"0","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
                    {"0","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
                    {"0","M","MM","MMM"}};

         int num=0,i;

         for(i=0;i<s.size();i++)
         {
             if(s[i]=='I') num+=1;
             if(s[i]=='V') 
             {
                if(i!=0 && s[i-1]=='I') num+=3;
                else num+=5;
             }
             if(s[i]=='X')
             {
                 if(i!=0 && s[i-1]=='I') num+=8;
                 else num+=10;
             }
             if(s[i]=='L')
             {
                 if(i!=0 && s[i-1]=='X') num+=30;
                 else num+=50;
             }
             if(s[i]=='C')
             {
                 if(i!=0 && s[i-1]=='X') num+=80;
                 else num+=100;
             }
             if(s[i]=='D')
             {
                 if(i!=0 && s[i-1]=='C') num+=300;
                 else num+=500;
             }
             if(s[i]=='M')  
             {
                 if(i!=0 && s[i-1]=='C') num+=800;
                 else num+=1000;
             }
         }
         return num;
    }
};
發佈了19 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章