close

題目

  Given a roman numberal, convert it to an interger.

Input is guaranteed to be within the range from 1 to 3999.

題意

  給羅馬數字,輸出數字總和

想法

  要考慮左邊的羅馬字或許是減法,參照對照表可容易完成。iterative 一一比對數字,加到總和。

code

int romanToInt(char* s) {
    //int len = strlen(s);
    int i;
    int sum=0;
    for(i=0; *(s+i); i++){
        if(s[i]=='M')
            sum+=1000;
        else if(s[i]=='D')
            sum+=500;
        else if(s[i]=='C'){
            if(/*i+1<len && */s[i+1]=='M'){
                sum+=900;
                i++;
            }else if(/*i+1<len && */s[i+1]=='D'){
                sum+=400;
                i++;
            }
            else
                sum+=100;
        }else if(s[i]=='L')
            sum+=50;
        else if(s[i]=='X'){
            if(/*i+1<len && */s[i+1]=='L')
            {
                sum+=40;
                i++;
            }
            else if(/*i+1<len && */s[i+1]=='C')
            {
                sum+=90;
                i++;
            }else
                sum+=10;
        }else if(s[i]=='V')
            sum+=5;
        else if(s[i]=='I')
        {
            if(/*i+1<len && */s[i+1]=='V'){
                sum+=4;
                i++;
            }else if(/*i+1<len && */s[i+1]=='X'){
                sum+=9;
                i++;
            }else
                sum+=1;
        }
    }
    return sum;
}

arrow
arrow
    文章標籤
    LeetCode string math C
    全站熱搜

    Davis 發表在 痞客邦 留言(0) 人氣()