按位觀察即可
#include <iostream>
#include <fstream>
#include <string>
//#define LOCAL
using namespace std;
#ifdef LOCAL
ofstream fout ("out.txt");
ifstream fin ("in.txt");
#else
ofstream fout ("preface.out");
ifstream fin ("preface.in");
#endif
char c[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int num[7];
int main() {
int n;
fin>>n;
for(int i = 1; i <= n; i++)
{
int base = 0;
int temp = i;
while(temp>0)
{
switch(temp%10)
{
case 1: num[base]++;break;
case 2: num[base]+=2;break;
case 3: num[base]+=3;break;
case 4: num[base]++; num[base+1]++; break;
case 5: num[base+1]++;break;
case 6: num[base+1]++;num[base]++;break;
case 7: num[base+1]++;num[base]+=2;break;
case 8: num[base+1]++;num[base]+=3;break;
case 9: num[base]++;num[base+2]++;break;
}
base+=2;
temp/=10;
}
}
for (int i = 0; i < 7; ++i)
{
if(num[i]!=0)
fout<<c[i]<<' '<<num[i]<<endl;
}
return 0;
}