根据罗马数字的唯一表示法,为了表示一个给定的整数 num
我们寻找不超过 num 的最大符号值,将 num 减去该符号值,然后继续寻找不超过 num 的最大符号值
将该符号拼接在上一个找到的符号之后,循环直至 num 为 000。最后得到的字符串即为num 的罗马数字表示。
操作:定义一个列表从罗马数字的大到小依次遍历,找到第一个不超过num,且最大的数值
直到,num = 0
const pair<int,string> valueSymbols[] = {
{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) {
//roma为答案
string roma;
//对 valueSymbols 数组的循环遍历,每次迭代都会将数组元素解构为 value 和 symbol 两个变量
for(auto [value,symbol]:valueSymbols){
//num>=value即找到了第一个小于num的最大罗马数字
while(num>=value){
num = num - value;
//拼接
roma +=symbol;
}
if(num == 0){
break;
}
}
return roma;
}
};