fbpx

Problema #3144 – Cifre_romane – Rezolvari PBInfo

de Mihai-Alexandru

Cerință

Alexandru a învățat azi despre numerele romane și cum se scriu acestea. Fiind distras de ce spuneau colegii a ajuns acasă și a realizat că nu știe cum să transforme un număr din cifre arabe în cifre romane. Deoarece a doua zi are un test numai din acest capitol, vă roagă să îl ajutați la transformarea unui număr N dat, scris cu cifre arabe în cifre romane.

Date de intrare

Fișierul cifre_romane.in conține un număr natural N scris cu cifre arabe.

Date de ieșire

Fișierul cifre_romane.out va conține scrierea cu cifre romane a lui N.

Restricții

  • 1≤N≤3999
  • cifrele romane sunt:
    • I=1
    • V=5
    • X=10
    • L=50
    • C=100
    • D=500
    • M=1000

Exemplu

cifre_romane.in

4

cifre_romane.out

IV
#include <bits/stdc++.h>
using namespace std;

ifstream cin("cifre_romane.in");
ofstream cout("cifre_romane.out");

char cif_rom[1001] , rez[256];
int n , cnt = 1 , t;

int main()
{
    cin >> n;
    cif_rom[1] = 'I';
    cif_rom[5] = 'V';
    cif_rom[10] = 'X';
    cif_rom[50] = 'L';
    cif_rom[100] = 'C';
    cif_rom[500] = 'D';
    cif_rom[1000] = 'M';
    while(n != 0)
    {
        int cif = n % 10;
        if(cif == 1)
        {
            rez[++t] = cif_rom[cif * cnt];
        }
        else if(cif == 2)
        {
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[cnt];
        }
        else if(cif == 3)
        {
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[cnt];
        }
        else if(cif == 4)
        {
            rez[++t] = cif_rom[5 * cnt];
            rez[++t] = cif_rom[cnt];
        }
        else if(cif == 5)
        {
            rez[++t] = cif_rom[5 * cnt];
        }
        else if(cif == 6)
        {
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[5 * cnt];
        }
        else if(cif == 7)
        {
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[5 * cnt];
        }
        else if(cif == 8)
        {
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[cnt];
            rez[++t] = cif_rom[5 * cnt];
        }
        else if(cif == 9)
        {
            rez[++t] = cif_rom[10 * cnt];
            rez[++t] = cif_rom[cnt];
        }
        n /= 10;
        cnt *= 10;
    }
    for(int i = t ; i >= 1 ; i--) cout << rez[i];
}
Comentarii

S-ar putea sa iti placa