羅馬數字轉換成整數--計蒜客-字串-模擬
阿新 • • 發佈:2018-12-20
給定一個羅馬數字 ss,將羅馬數字轉換成整數。
如羅馬數字I
,II
,III
,IV
,V
分別代表數字 1, 2, 3, 4, 51,2,3,4,5。
首先要來了解一下羅馬數字表示法,基本字元有 77 個:I
、V
、X
、L
、C
、D
、M
,分別表示 11、55、1010、5050、100100、500500、10001000。
在構成數字的時候,有下列規則:
1、相同的數字連寫,所表示的數等於這些數字相加得到的數,如:III
= 3=3;
2、小的數字在大的數字的右邊,所表示的數等於這些數字相加得到的數, 如:VIII
= 8=8;XII
= 12=12;
3、小的數字,(限於Ⅰ
、X
和C
)在大的數字的左邊,所表示的數等於大數減小數得到的數,如: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; }