1. 程式人生 > >羅馬數字轉換成整數--計蒜客-字串-模擬

羅馬數字轉換成整數--計蒜客-字串-模擬

給定一個羅馬數字 ss,將羅馬數字轉換成整數。

如羅馬數字IIIIIIIVV分別代表數字 1, 2, 3, 4, 51,2,3,4,5。

首先要來了解一下羅馬數字表示法,基本字元有 77 個:IVXLCDM,分別表示 11、55、1010、5050、100100、500500、10001000。

在構成數字的時候,有下列規則:

1、相同的數字連寫,所表示的數等於這些數字相加得到的數,如:III = 3=3;

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

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

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

輸入格式

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

輸出格式

輸出對應的整數 ss。

樣例輸入複製

CXXIII

樣例輸出複製

123
#include <iostream>
using namespace std;

char a[7]={'I','V','X','L','C','D','M'}; //羅馬字元與下面int陣列一一對應
int b[7]={1 ,5 ,10 ,50 ,100,500,1000};
int find(char s) {  //返回羅馬數字對應的整數
 for(int i=0;i<7;i++) {
 if(a[i]==s)
 return b[i];
 }
return 0;
}
int main() {
 string s;
 cin>>s;
 int sum=0;
for(int i=0;i<s.size();i++) { 
 int m=find(s[i]); //取當前和後一個字元進行判斷
 int n=find(s[i+1]);
if((s[i]=='I'||s[i]=='X'||s[i]=='C')&&(m<n)) {  //出現類似9,4的情況
 sum+=n-m;        
 i++;
 }
 else
 sum+=m;
}
 cout << sum<<endl;
 return 0;
}