字符串处理,没有什么特别的,本机不会测试文件输入输出流……
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int w[26];
void init()
{
memset(w, 0, sizeof(int)*26);
w['I'-'A']=1;
w['V'-'A']=5;
w['X'-'A']=10;
w['L'-'A']=50;
w['C'-'A']=100;
w['D'-'A']=500;
w['M'-'A']=1000;
}
int toint(string s)
{
int i, n=0, tmp;
for(i=0; i<s.length(); i++)
{
tmp = w[s[i]-'A'];
if(i+1 < s.length() && w[s[i+1]-'A']>tmp)
{
tmp=w[s[i+1]-'A']-tmp;
i++;
}
n+=tmp;
}
return n;
}
string toiii(int n)
{
string s= "";
char *iii="MDCLXVI";
int i,unit=1000;
while(n>=unit)
{
s+='M';
n-=unit;
}
for(i=0, unit /=10; unit>0; unit /=10, i+=2)
{
if(i>=9*unit)
{
s+=iii[i+2];
s+=iii[i];
n-=9*unit;
}
else
{
if(n>=5*unit)
{
s+=iii[i+1];
n-=5*unit;
}
else if(n>=4*unit)
{
s+=iii[i+2];
s+=iii[i+1];
n-=4*unit;
}
while(n>=unit)
{
s+=iii[i+2];
n-=unit;
}
}
}
return s;
}
int main()
{
//ifstream cin("roma.in");
//ofstream cout("estdout.pc2");
init();
int n,num=0;
while(cin >> n)
{
if(n==0) break;
int s=0;
string t;
for(int i=0; i<n; i++)
{
cin >> t;
s+=toint(t);
}
t=toiii(s);
cout << t << endl;
}
return 0;
}