题目:
4000以内的整数转罗马数字
解答:
先将1-9 10 - 90 100 - 900 1000 - 4000 的整数对应的罗马数字存成map
然后逐次取千位 百位 十位 个位 对应的数值 进行匹配得出结果。
代码:
class Solution {
public:
string intToRoman(int num) {
map<int, string> ir;
ir.insert(pair<int, string>(1, "I"));
ir.insert(pair<int, string>(2, "II"));
ir.insert(pair<int, string>(3, "III"));
ir.insert(pair<int, string>(4, "IV"));
ir.insert(pair<int, string>(5, "V"));
ir.insert(pair<int, string>(6, "VI"));
ir.insert(pair<int, string>(7, "VII"));
ir.insert(pair<int, string>(8, "VIII"));
ir.insert(pair<int, string>(9, "IX"));
ir.insert(pair<int, string>(10, "X"));
ir.insert(pair<int, string>(20, "XX"));
ir.insert(pair<int, string>(30, "XXX"));
ir.insert(pair<int, string>(40, "XL"));
ir.insert(pair<int, string>(50, "L"));
ir.insert(pair<int, string>(60, "LX"));
ir.insert(pair<int, string>(70, "LXX"));
ir.insert(pair<int, string>(80, "LXXX"));
ir.insert(pair<int, string>(90, "XC"));
ir.insert(pair<int, string>(100, "C"));
ir.insert(pair<int, string>(200, "CC"));
ir.insert(pair<int, string>(300, "CCC"));
ir.insert(pair<int, string>(400, "CD"));
ir.insert(pair<int, string>(500, "D"));
ir.insert(pair<int, string>(600, "DC"));
ir.insert(pair<int, string>(700, "DCC"));
ir.insert(pair<int, string>(800, "DCCC"));
ir.insert(pair<int, string>(900, "CM"));
ir.insert(pair<int, string>(1000, "M"));
ir.insert(pair<int, string>(2000, "MM"));
ir.insert(pair<int, string>(3000, "MMM"));
int x = 1000;
int t = 0;
string s = "";
while (num)
{
t = num / x * x;
s = s + ir[t];
num = num - t;
x = x / 10;
}
return s;
}
};