簡(jiǎn)單小白~leetcode簡(jiǎn)單級(jí)13羅馬數(shù)字轉(zhuǎn)整數(shù)

題目描述

羅馬數(shù)字包含以下七種字符: I, V, X, L,C,D 和 M。

字符 數(shù)值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 羅馬數(shù)字 2 寫做 II ,即為兩個(gè)并列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。

通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為 IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:

I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1 到 3999 的范圍內(nèi)。

示例

輸入: "III"
輸出: 3

答題模板

int romanToInt(char* s) 
{
}

分析

由答題模式發(fā)現(xiàn)是讓我們書寫子函數(shù),該子函數(shù)的形參是字符型指針變量s,咋一看可能覺得不太理解,關(guān)于指針可以看第一節(jié)編程小白~leetcode簡(jiǎn)單級(jí)。其實(shí)這個(gè)形參很簡(jiǎn)單只是表示字符串s而已,明白這一點(diǎn),應(yīng)該就會(huì)好做了。其次如果看到這種題感覺復(fù)雜的話,可以先實(shí)現(xiàn)一位字符,然后再實(shí)現(xiàn)二位字符再依次累加才能不斷增進(jìn)編程的興趣和實(shí)現(xiàn)一步一步慢慢來的習(xí)慣,所謂不會(huì)走就想跑是辦不到的。所以最開始著手能夠?qū)崿F(xiàn)的再慢慢增加難度,加上堅(jiān)持和信念相信一定可以的。
完整代碼

#include<stdio.h>
#include<string.h>

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

int main()
{
   int i,j,m;
   char str[10];
   gets(str);
   m = romanToInt(str);
   printf("%d\n",m);
}

目前只會(huì)最簡(jiǎn)單的做法,等未來見識(shí)更多的方法再來補(bǔ)充更好的方式去解決這個(gè)問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容