思路:
首先利用map将每一种罗马数字和整数映射关系记录下来。然后对于整数,首先每次从map最大的Key开始遍历,直到循环结束为止。
class Solution {
public:
string intToRoman(int num) {
//转罗马数字
//将所有映射放入map中,因为map的Key是按照从小到大排列的,所以遍历的时候使用rbegin()和rend()。
map<int, string> roma = { { 1,"I" }, { 4,"IV" }, { 5,"V" }, { 9,"IX" }, { 10,"X" },
{ 40,"XL" },{ 50,"L" }, { 90,"XC" }, { 100,"C" }, { 400,"CD" }, { 500,"D" }, { 900,"CM" }, { 1000,"M" } };
string result;
for(auto iter=roma.rbegin();iter!=roma.rend();++iter)
{
while(num>=iter->first)
{
num=num-iter->first;
result=result+iter->second;
}
}
return result;
}
};