一.问题描述:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
二.我的解题思路
拿到这个题目,首先是维基百科了一下罗马数字的表示形式,以前只知道10以内罗马数字的表示,而并不知道10之外的罗马数字表示形式。针对这个题目,自然就是对整数进行划分,如1954=1000+900+50+4,每个四位数的整数都可以分为一个四位整数,一个三位整数,一个二位整数,一个一位整数这样的求和形式。而针对每个细分的整数,可以直接建立一张表,查表即可知对应的罗马字符。最后测试通过的程序如下:
class Solution {
public:
string intToRoman(int num) {
int test=num;string curr("");string res("");
vector<vector<string>>roman_string = {
{"", "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"}
};
int cnt=0;
while(test>0)
{
int curr_num=(test%10)*pow(10.0,cnt);
curr = roman_string[cnt][test%10];
res=curr+res;
test=test/10;
cnt++;
}
return res;
}