Cum poți face un program pentru transfoarmarea cifrelor romane în cifre arabe?
Răspunsuri la întrebare
Salut, am contemplat destul de mult pe exercitiul asta pana sa ma imbunez sa-l fac chiar eu.
El merge, conform principiilor numerelor romane.
Singura problema la el este ca nu vei obtine rezultate daca vei introduce numere cu minuscula, deci toate vor fi cu minuscula. Daca insisti sa mergi si pe minuscule, poti folosi strupr(). De altfel, programul functioneaza numai pana la MMMCMXCIX, adica pana la 3999, caci nu pot implementa restul numerelor, adica cele cu liniuta, care reprezinta ele*1000, in rest, pare functional.
Alta chestie este ca, daca ai introdus un numar roman gresit, programul nu va da raspunsul corect si nici nu are mecansime de detectie a greselilor, deci, cand testezi, asigura-te ca folosesti numere corecte.
Acesta este algoritmul in C++:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char s[10];
int n=0, i;
cout<<"Numar roman: "; cin>>s;
i=strlen(s);
cout<<i<<endl;
do{
if(s[i-1]=='I'){ n=n+1; i--;}
if(s[i-1]=='V'&&s[i-2]=='I'){ n=n+4; i=i-2;}
else if(s[i-1]=='V'){ n=n+5; i--;}
if(s[i-1]=='X'&&s[i-2]=='I'){ n=n+9; i=i-2;}
else if(s[i-1]=='X'){ n=n+10; i--;}
if(s[i-1]=='L'&&s[i-2]=='X'){ n=n+4; i=i-2;}
else if(s[i-1]=='L'){ n=n+50; i--;}
if(s[i-1]=='C'&&s[i-2]=='X'){ n=n+90; i=i-2;}
else if(s[i-1]=='C'){ n=n+100; i--;}
if(s[i-1]=='D'&&s[i-2]=='C'){ n=n+400; i=i-2;}
else if(s[i-1]=='D'){ n=n+500; i--;}
if(s[i-1]=='M'&&s[i-2]=='C'){ n=n+900; i=i-2;}
else if(s[i-1]=='M'){ n=n+1000; i--;}
}while(i>0);
cout<<"Nr arab: "<< n;
}