Code works fine with "official" testcases.
http://acm.ashland.edu/2007/Problem-Set/Data/A.in
http://acm.ashland.edu/2007/Problem-Set/Data/A.out
Thanks in advance.
Code: Select all
/*Rommel Anatoli Quintanilla Cruz*/
/*06 de Diciembre del 2009*/
/*RE*/
#include <iostream>
#include <string>
using namespace std;
char s[7]={'I','V','X','L','C','D','M'};
int v[7]={1,5,10,50,100,500,1000};
string us[10]={"","I","II","III","IV","V","VI","VII","VIII","IX"};
string ds[10]={"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
string cs[10]={"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
string ums[5]={"","M","MM","MMM","MMMM"};
int aValor(char c)
{
for(int I=0;I<7;I++)
if(s[I]==c)
return v[I];
return 0;
}
int aEntero(string romano)
{
int tmp=0;
for(unsigned int I=0;I<romano.length();I++)
{
if(aValor(romano[I])<aValor(romano[I+1]))
{
tmp+=aValor(romano[I+1])-aValor(romano[I]);
I++;
}
else
tmp+=aValor(romano[I]);
}
return tmp;
}
string aRomano(int entero)
{
string u="";
string d="";
string c="";
string m="";
int unidades=entero%10;
u=us[unidades];
entero/=10;
if(entero>0)
{
int decenas=entero%10;
d=ds[decenas];
entero/=10;
if(entero>0)
{
int centenas=entero%10;
c=cs[centenas];
entero/=10;
if(entero>0)
{
int umillar=entero%10;
m=ums[umillar];
}
}
}
return m+c+d+u;
}
int main()
{
int k=1;
int n;
while(true)
{
cin>>n;
if(n==0)
return 0;
int tmp=0;
for(int I=0;I<n;I++)
{
string palabra;
cin>>palabra;
tmp+=aEntero(palabra);
}
cout<<"Case "<<aRomano(k++)<<": "<<aRomano(tmp)<<endl;
}
return 0;
}