C++ 代码
#include<iostream>
#include<map>
#include<string>
using namespace std;
map<int, string>ms = {
{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"}
};
map<string, int>ansm;
string ansstrs[7] = { "I","V","X","L","C","D","M" };
int num;
int key[13] = { 1,4,5,9,10,40,50,90,100,400,500,900,1000 };
string getRoma(int num)
{
string ans = "";
while (num >0)
{
for (int i = 12; i >= 0; i--)
{
if (num >= key[i])
{
string t1 = "";
int t = num / key[i];
num = num - key[i] * t;
if (ms[key[i]].size() == 2)
{
string a(1,ms[key[i]][0]);
string b(1,ms[key[i]][1]);
ansm[a] += t;
ansm[b] += t;
}
else
{
ansm[ms[key[i]]] += t;
}
for (int j = 0; j < t; j++)
t1 += ms[key[i]];
ans = ans + t1;
break;
}
}
}
return ans;
}
int main()
{
//freopen("sb.txt", "r", stdin);
// cin >> num;
num = 5;
for (int i = 1; i <= num; i++)
getRoma(i);
for (int i = 0; i < 7; i++)
{
if (!ansm[ansstrs[i]])continue;
printf("%s %d\n", ansstrs[i].c_str(), ansm[ansstrs[i]]);
}
return 0;
}