Roman to integer

来源:互联网 发布:中国农大网络教育首页 编辑:程序博客网 时间:2024/06/05 14:35
#include "stdafx.h"#include<string>#include<iostream>using namespace std;int RomanToInt(string s){int res = 0;//初始化结果int L = s.length();string str[4];//string s4, s3, s2, s1;int i = 0;//千位while (s[i] == 'M'&&i<L){str[3] += s[i++];}//百位while (s[i] != 'X'&&s[i] != 'L'&&s[i] != 'I'&&s[i] != 'V'&&i<L){str[2] += s[i++];}//十位while (s[i] != 'I'&&s[i] != 'V'&&i<L){str[1] += s[i++];}//各位while (i < L){str[0] += s[i++];}string Roman[4][10] ={"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX","", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC","", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM","", "M", "MM", "MMM"};for (int m = 3; m >=0; m--)//从最高位开始匹配{res *= 10;for (int n = 0; n < 10; n++){if (Roman[m][n] == str[m]){res += n;break;}}}return res;}int main(){string s;cin >> s;cout << RomanToInt(s);return 0;}

将罗马数字转换为整数,这一题和上一题的思路差不多,都是按照各位置将书分割开。

稍微有点绕的就是怎样分割开罗马数字。其实将数字写下来,找找规律就能看出来。各位只能由I and v 构成,十位由X和L构成,百位由C和D构成,千位就只能是M了,因为题目限制在1-3999。

将罗马数字分割开,接下来就是在二维数组中进行匹配了。


0 0
原创粉丝点击