1.统计N以内(1,2...9) (10,20...90) (100,200,...900) (1000,2000,3000)出现的次数
2.然后再统计I V X L C D M的次数
/*
ID: xpli1
PROG: preface
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define OUT cout
#define IN cin
ofstream fout ("preface.out");
ifstream fin ("preface.in");
typedef struct{
int n;
char c;
}roman;
roman res[7];
int num[5][10];
int N;
void solve(){
int i,j,t,k=1;
int temp = N;
while(temp){
t = temp % 10;
for(i=1; i<k; i++){
for(j=1; j<10; j++){
num[i][j] += t*pow(10,k-2);
}
}
for(i=1; i<t; i++)
num[k][i] += pow(10,k-1);
num[k][t] += N % (int)(pow(10,k-1)) + 1;
temp /= 10;
k++;
}
res[0].c = 'I';
res[0].n = (num[1][1]+num[1][6]+num[1][4]+num[1][9])+2*(num[1][2]+num[1][7])+3*(num[1][3]+num[1][8]);
res[1].c = 'V';
res[1].n = num[1][4]+num[1][5]+num[1][6]+num[1][7]+num[1][8];
res[2].c = 'X';
res[2].n = (num[2][1]+num[2][6]+num[2][4]+num[2][9])+2*(num[2][2]+num[2][7])+3*(num[2][3]+num[2][8])+num[1][9];
res[3].c = 'L';
res[3].n = num[2][4]+num[2][5]+num[2][6]+num[2][7]+num[2][8];
res[4].c = 'C';
res[4].n = (num[3][1]+num[3][6]+num[3][4]+num[3][9])+2*(num[3][2]+num[3][7])+3*(num[3][3]+num[3][8])+num[2][9];
res[5].c = 'D';
res[5].n = num[3][4]+num[3][5]+num[3][6]+num[3][7]+num[3][8];
res[6].c = 'M';
res[6].n = num[4][1]+2*num[4][2]+3*num[4][3]+num[3][9];
}
int main()
{
IN >> N;
solve();
for(int i=0; i<7; i++){
if(res[i].n != 0)
OUT << res[i].c << ' ' << res[i].n << endl;
}
return 0;
}