C++之羅馬數字轉換為整型數字(12)---《那些奇怪的演算法》
阿新 • • 發佈:2019-02-16
參考《one-day-one-leetcode》
在上篇部落格中我們討論了將1~3999以內的數字轉化為羅馬數字,著重討論了非7個標準的羅馬數字的一些表達,例如4,6,3等等的表達,這篇部落格我們著討論一下將羅馬數字轉化為整型數字的情況!
其實我們在進行轉化的時候主要注意一下4,40,400,等數字的表達即可!
程式碼:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int toNum(char ch);
int romanToInt(string s){
int ret = 0;
int i = 0;
while ( i < s.length()){
if (i + 1 < s.length() && toNum(s[i]) < toNum(s[i + 1])){
ret += toNum(s[i + 1]) - toNum(s[i]);
i++;
}
else{
ret += toNum(s[i]);
}
i++;
}
return ret;
}
int toNum(char ch){
int num = 0;
switch (ch){
case 'I':num = 1; break;
case 'V':num = 5; break;
case 'X':num = 10; break;
case 'L':num = 50; break;
case 'C':num = 100; break;
case 'D':num = 500; break;
case 'M':num = 1000; break;
}
return num;
}
int main(){
string s = "MMMDCCLXXII";
int con = romanToInt(s);
cout << con << endl;
return 0;
}
執行結果: