簡單的演算法問題6——羅馬數字轉換成整數__演算法

來源:互聯網
上載者:User
簡單的演算法問題6——羅馬數字轉換成整數

此演算法均是用C++編寫
此演算法題均是來自計蒜客
此題適合初學演算法或者想瞭解編程但又只會一點點文法的人… 題目

給定一個羅馬數字 s,將羅馬數字轉換成整數。
如羅馬數字I,II,III,IV,V分別代表數字 1, 2, 3, 4, 5。
首先要來瞭解一下羅馬數字標記法,基底字元有 7 個:I、V、X、L、C、D、M,分別表示 1、5、10、50、100、500、1000。 規則

在構成數位時候,有下列規則:
1、相同的數字連寫,所表示的數等於這些數字相加得到的數,如:III = 3;

2、小的數字在大的數位右邊,所表示的數等於這些數字相加得到的數, 如:VIII = 8;XII = 12;

3、小的數字,(限於Ⅰ、X和C)在大的數位左邊,所表示的數等於大數減小數得到的數,如:IV = 4;IX = 9;

4、正常使用時,連寫的數字重複不得超過三次。 輸入格式

輸入一個羅馬數字字串,其對應的數字為 s(1≤s≤3999)。 輸出格式

輸出對應的整數 s。

形如:

輸入
CXXIII

輸出
123 刨坑點

其實我覺得這道題沒什麼難道,在學面向過程的程式就應該學會了,當年教譚浩強的C的時候,還是有很多這樣的例子。這種題適合初學者看。

別人寫的部落格都是很高深的東西,我寫的很簡單哈,從最基礎的開始,慢慢循序漸進。[無奈地說不出話來]

#include <iostream>#include <string>using std::string;using namespace std;int RomanToInt(string Roman);int main(){    string Roman;    cin>>Roman;    cout<<RomanToInt(Roman);    return 0;}int RomanToInt(string Roman){    int num=0;    for(int i=Roman.length()-1;i>-1;i--){            if(Roman.data()[i]=='I')            {                num+=1;            }               if(Roman.data()[i]=='V')             {                if(Roman.data()[i-1]=='I')                {                    num=num+5-2;                 }                else                {                    num+=5;                }            }               if(Roman.data()[i]=='X')            {                   if(Roman.data()[i-1]=='I')                {                    num=num+10-2;                 }                else                {                    num+=10;                }            }             if(Roman.data()[i]=='L')            {                if(Roman.data()[i-1]=='X')                {                    num=num+50-20;                }                else                {                    num+=50;                }            }               if(Roman.data()[i]=='C')            {                if(Roman.data()[i-1]=='X')                {                    num=num+100-20;                }                else                {                    num+=100;                }             }                   if(Roman.data()[i]=='D')            {                if(Roman.data()[i-1]=='C')                {                    num=num+500-200;                }                else                {                    num+=500;                }            }            if(Roman.data()[i]=='M')            {                if(Roman.data()[i-1]=='C')                {                    num=num+1000-200;                }                else                {                    num+=1000;                }            }       }    return num;}

測試成功。~[笑cry]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.