思路:
提前用vector把一对pair存好(从小到大的顺序排列好),给出的数字跟vector中的数字比较,如98,遇到第一个比他大的数字90,总数减去它,剩下8,并且输出90对应的char类型XC,剩下8继续上述操作,直至为0,8大于5,减去5为3,输出V,3大于1故输出III。综合输出 XCVIII
class Solution {
public:
void priVector(vector<pair<string, int>>& s) {
s.push_back(make_pair("I", 1));
s.push_back(make_pair("IV", 4));
s.push_back(make_pair("V", 5));
s.push_back(make_pair("IX", 9));
s.push_back(make_pair("X", 10));
s.push_back(make_pair("XL", 40));
s.push_back(make_pair("L", 50));
s.push_back(make_pair("XC", 90));
s.push_back(make_pair("C", 100));
s.push_back(make_pair("CD", 400));
s.push_back(make_pair("D", 500));
s.push_back(make_pair("CM", 900));
s.push_back(make_pair("M", 1000));
//先提前存好
//6种特殊是IV IX XL XC CD CM
}
string intToRoman(int num) {
vector<pair<string, int>>s;
priVector(s);
int i = 0;
string res;
while (num) {
for (int j = s.size()-1; j >= 0; j--) {
if (num >= s[j].second) {//遇到第一个比存储中数字大,转换
num -= s[j].second;
res += s[j].first;
break;
}
}
}
return res;
}
};