codice:
#include <iostream>
#define NR 7
using namespace std;
int main()
{
char n_romani[] = {'M','D','C','L','X','V','I'};
int valori[]={1000,500,100,50,10,5,1};
char risp;
char corrente,successivo;
int esci=0;
int accumulatore=0,i,j,k;
i=0;
char analizza[20];
do
{
cout<<"INSERISCI NUMERO ROMANO: ";
cin.getline(analizza,20);
while(!esci)
{
j=k=-1;
//prendo i primo simbolo
corrente=analizza[i];
successivo=analizza[i+1];
//controllo se corrente e successivo sono nell'array n_romani
for(int q=0;q<NR;q++)
{
if (corrente==n_romani[q]) j=q;
if (successivo==n_romani[q]) k=q;
}
//si distinguono questi casi
//caso 1: j=k=-1 non ci sono altri elementi...esco
//caso 2: j<=k ... significa che il numero corrente è maggiore o uguale del numero successivo
//caso 3: j>k ... significa che il numero corrente è minore del suo successivo...si procede con la differenza
//caso 4: k=-1 ... si somma solo il valore di j
if ((j==-1)&&(k==-1)) esci=1;
else if (k==-1)
{
accumulatore+=valori[j];
i++;
esci=1;
}
else if (j<=k)
{
accumulatore+=valori[j];
i++;
}
else if (j>k)
{
accumulatore+=valori[k]-valori[j];
i+=2;
}
}
cout<<analizza<<" => "<<accumulatore<<"\n";
cout<<"RIPETERE [S/N]? ";cin>>risp;
}
while ((risp=='S') || (risp=='s'));
return 0;
}