# PBinfo #3257 – cifre_romane1 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Dan a plecat în vacanța de vară la Roma. Pe fațada clădirilor apărea anul lor de construcție scris cu cifre romane. Ajutați-l să înțeleagă numărul scris în cifre romane transformându-l în număr scris cu cifre arabe. Dacă numărul nu respectă regulile de scriere a numerelor romane, se afișează mesajul Numar invalid.

Date de intrare
Fișierul de intrare cifre_romane1.in conține pe prima linie numărul n scris cu cifre romane.

Date de ieșire
Fișierul de ieșire cifre_romane1.out va conține pe prima linie numărul n scris în cifre arabe dacă numărul este valid și în caz contrar se afișează mesajul Numar invalid.

Restricții și precizări

1 ≤ n ≤ 3999

Exemplu:
cifre_romane1.in

IV
cifre_romane1.out

4
cifre_romane1.in

IIII
cifre_romane1.out

Numar invalid

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
string v2[4000];
char v[5];
int main ()
{
    ifstream cin ("cifre_romane1.in");
    ofstream cout ("cifre_romane1.out");
    for(int d=1;d<=3999;d++)
    {
        int cnt=4,cj=d,cnt1=0;
        while(cj>0)
        {
            cnt1++;
            v[cnt]=(char)(cj%10+48);
            cnt--;
            cj/=10;
        }
        string s="";
        for(int i=4-cnt1+1;i<=4;i++)
        {
            if(i==1)
            {
                if(v[i]=='1')
                    s=s+"M";
                if(v[i]=='2')
                    s=s+"MM";
                if(v[i]=='3')
                    s=s+"MMM";
            }
            else if(i==2)
            {
                if(v[i]=='9')
                    s=s+"CM";
                else if(v[i]=='4')
                    s=s+"CD";
                else
                {
                    int val=(int)(v[i]-'0');
                    if(val>=5)
                        s=s+"D";
                    val%=5;
                    for(int j=1;j<=val;j++)
                        s=s+"C";
                }
            }
            else if(i==3)
            {
                if(v[i]=='9')
                    s=s+"XC";
                else if(v[i]=='4')
                    s=s+"XL";
                else
                {
                    int val=(int)(v[i]-'0');
                    if(val>=5)
                        s=s+"L";
                    val%=5;
                    for(int j=1;j<=val;j++)
                        s=s+"X";
                }
            }
            else if(i==4)
            {
                if(v[i]=='9')
                    s=s+"IX";
                else if(v[i]=='4')
                    s=s+"IV";
                else
                {
                    int val=(int)(v[i]-'0');
                    if(val>=5)
                        s=s+"V";
                    val%=5;
                    for(int j=1;j<=val;j++)
                        s=s+"I";
                }
            }
        }
        v2[d]=s;
    }
    string s2;
    cin>>s2;
    int ok=0;
    for(int i=1;i<=3999;i++)
    {
        if(v2[i]==s2)
        {
            ok=1;
            cout<<i;
        }
    }
    if(ok==0)
        cout<<"Numar invalid";
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3257)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3257/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3257/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
