簡單的演算法問題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]