羅馬數字轉換成整型數字
阿新 • • 發佈:2018-12-16
- Roman To Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999. - 題目大意:給定一個羅馬數字,把它轉換成一個整型數字。輸入的羅馬數字保證是在1~3999範圍內的。
- 思路:(對照 整型數字轉換成羅馬數字)
首先看羅馬數字與整型數字對照表
羅馬數字 | 整型數字 |
---|---|
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
羅馬數字的基本規則是:
- 相同的數字連寫、所表示的數等於這些數字相加得到的數、如:Ⅲ=3;
- 小的數字在大的數字的右邊、所表示的數等於這些數字相加得到的數、 如:Ⅷ=8、Ⅻ=12;
- 小的數字、(限於 Ⅰ、X 和 C)在大的數字的左邊、所表示的數等於大數減小數得到的數、如:Ⅳ=4、Ⅸ=9;
- 正常使用時、連寫的數字重複不得超過三次;
- 在一個數的上面畫一條橫線、表示這個數擴大 1000 倍。
按照這個規則就是把羅馬數字的每個字元翻譯成整型數字,然後按照順序進行判斷,從左到右,當後邊一個大於前邊一個時,就做減法運算,否則就做加法運算。
- 程式碼:
#include<iostream> using namespace std; int romanToInt(string s) { int n = s.length(); int res = 0; int* num = new int[n]; for(int i=0; i<n; i++) { switch(s[i]) { case 'M': num[i] = 1000; break; case 'D': num[i] = 500; break; case 'C': num[i] = 100; break; case 'L': num[i] = 50; break; case 'X': num[i] = 10; break; case 'V': num[i] = 5; break; case 'I': num[i] = 1; break; default: break; } } for(int i=0; i<n-1; i++) { if(num[i] < num[i+1]) res -= num[i]; else res += num[i]; } res += num[n-1]; return res; } int main() { cout<<romanToInt("IV")<<endl; cout<<romanToInt("VIII")<<endl; cout<<romanToInt("XLIV")<<endl; cout<<romanToInt("LXXXVIII")<<endl; cout<<romanToInt("CDXLIV")<<endl; cout<<romanToInt("DCCCLXXXVIII")<<endl; cout<<romanToInt("MMXIV")<<endl; cout<<romanToInt("MMMXVIII")<<endl; return 0; }
- 執行結果:
- 以上。
版權宣告:本文為博主原創文章,轉載請註明出處。
個人部落格地址:https://yangyuanlin.club
歡迎來踩~~~~