题目
给你一个整数,将其转为罗马数字。
1 <= num <= 3999
分析
与罗马数字转整数相对应的一道题
方法一:
根据罗马数字的唯一表示法,找到规律发现,表示一个数字,要先用小与它最大的字符表示
且有一些数字需要再大的字符前加一个小的字符,包括900,400,90,40,9,4,所以需要特别表明这几个数字
方法二:
利用模运算和除法运算,我们可以得到num 每个位上的数字,题目说明1<num<3999,所以最多四位
代码
//方法一
const pair<int,string> symbolroman[]{
{1000,"M"},
{900,"CM"},
{500,"D"},
{400,"CD"},
{100,"C"},
{90,"XC"},
{50,"L"},
{40,"XL"},
{10,"X"},
{9,"IX"},
{5,"V"},
{4,"IV"},
{1,"I"}
};
class Solution {
public:
string intToRoman(int num) {
string roman;
for(const auto &[value,symbol]:symbolroman){
while(num>=value){
roman += symbol;
num -= value;
}
if(num==0){
break;
}
}
return roman;
}
};
//方法二
//题解代码
const string thousands[] = {"", "M", "MM", "MMM"};
const string hundreds[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
const string tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
const string ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
class Solution {
public:
string intToRoman(int num) {
return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
}
};
总结
静态const的使用
pair STL的使用
方法一for循环的设置