/*

    Arapski broj u rimski broj.


    http://www.periodni.com/hr/pretvaranje_rimskih_brojeva.html
    https://bs.wikipedia.org/wiki/Rimski_brojevi
    http://www.mef.unizg.hr/~mtaradi/nastava/ostalo/preracun/skripte/rim_arap.htm
    http://gwydir.demon.co.uk/jo/numbers/roman/index.htm
    https://www.google.rs/search?q=convert+to+roman+numerals+c+code&gws_rd=cr&ei=m8OWWc6FFsjeUYvmjfAE
    https://stackoverflow.com/questions/23269143/c-program-that-converts-numbers-to-roman-numerals
    https://www.google.rs/search?q=algoritam+za+arapski+u+rimski+broj&rlz=1C1VFKB_enRS696RS704&oq=algoritam+za+arapski+u+rimski+broj&aqs=chrome..69i57.7216j0j7&sourceid=chrome&ie=UTF-8


    Napisati funkciju koja za uneti arapski broj prikazuje odgovarajuci rimski broj.

    Podsecanja radi, nize su date tabele sa rimskim ciframa:

    I   V   X   L   C   D   M
    1   5   10  50  100 500 1000

    IV  IX  XL  XC  CD  CM
    4   9   40  90  400 900

    Testni primer:

    2736 = MMDCCXXXVI

    tj. razdvojeno:

           2  7   3   6
    2736 = MM DCC XXX VI

           3   4  4   4
    3444 = MMM CD XL  IV

           3   9  9   9
    3999 = MMM CM XC  IX

MDCCCLXXXVIII = 1000 + 500 + 100 + 100 + 100 + 50 + 10 + 10 + 10 + 5 + 1 + 1 + 1 = 1888

Ako je vrijednost lijeve znamenke manja od desne,
onda se vrijednost lijeve znamenke oduzima od vrijednosti desne.

MCMXCIX = M CM XC IX or 1000 + (1000 - 100) + (100 - 10) + (10 - 1) = 1999

MCMXCIX = M CM XC IX or 1000 - 100 + 1000 - 10 + 100 - 1 + 10 = 1999


    I   V   X   L   C   D   M
    1   5   10  50  100 500 1000


    Cifra hiljada: broj M-ova na pocetku * 1000 je broj hiljada.

    0       1000        2000        3000    4000    5000    ...     11000
    0       1           2           3       4       5       ...     11
            M           MM          MMM     MMMM    MMMMM           MMMMMMMMMMM

    Cifra stotina:     <4 , =4 , >4

    0       100     200     300     400     500     600     700     800     900
    0       1       2       3       4       5       6       7       8       9
            C       CC      CCC     CD      D       DC      DCC     DCCC    CM


    Cifra desetica:     <4 , =4 , >4

    0       10      20      30      40      50      60      70      80      90
    0       1       2       3       4       5       6       7       8       9
            X       XX      XXX     XL      L       LX      LXX     LXXX    XC


    Cifra jedinica:     <4 , =4 , >4

    0       1       2       3       4       5       6       7       8       9
            I       II      III     IV      V       VI      VII     VIII    IX


*/

#include <stdio.h>
#include <string.h>


// 1. nacin

void dopuniHiljade(char rimski[], int broj) {
    char hiljade[100];
    int i;
    for (i = 0; i < broj; i++) {
        hiljade[i] = 'M';
    }
    hiljade[i] = '\0';
    strcat(rimski, hiljade);
}

void dopuniStotine(char rimski[], int broj) {
    char stotine[100];
    int i, j = 1;
    if (broj < 4) {
        for (i = 0; i < broj; i++) {
            stotine[i] = 'C';
        }
        stotine[i] = '\0';
    } else if (broj == 4) {
        strcpy(stotine, "CD");
    } else if (broj > 4 && broj < 9) {
        stotine[0] = 'D';
        for (i = 5; i < broj; i++) {
            stotine[j++] = 'C';
        }
        stotine[j] = '\0';
    } else {
        strcpy(stotine, "CM");
    }
    strcat(rimski, stotine);
}

void dopuniDesetice(char rimski[], int broj) {
    char desetice[100];
    int i, j = 1;
    if (broj < 4) {
        for (i = 0; i < broj; i++) {
            desetice[i] = 'X';
        }
        desetice[i] = '\0';
    } else if (broj == 4) {
        strcpy(desetice, "XL");
    } else if (broj > 4 && broj < 9) {
        desetice[0] = 'L';
        for (i = 5; i < broj; i++) {
            desetice[j++] = 'X';
        }
        desetice[j] = '\0';
    } else {
        strcpy(desetice, "XC");
    }
    strcat(rimski, desetice);
}

void dopuniJedinice(char rimski[], int broj) {
    char desetice[100];
    int i, j = 1;
    if (broj < 4) {
        for (i = 0; i < broj; i++) {
            desetice[i] = 'I';
        }
        desetice[i] = '\0';
    } else if (broj == 4) {
        strcpy(desetice, "IV");
    } else if (broj > 4 && broj < 9) {
        desetice[0] = 'V';
        for (i = 5; i < broj; i++) {
            desetice[j++] = 'I';
        }
        desetice[j] = '\0';
    } else {
        strcpy(desetice, "IX");
    }
    strcat(rimski, desetice);
}

void dopuniRimski(char rimski[], int broj, int i) {
    switch (i) {
        case 0: dopuniHiljade(rimski, broj);
            break;
        case 1: dopuniStotine(rimski, broj);
            break;
        case 2: dopuniDesetice(rimski, broj);
            break;
        case 3: dopuniJedinice(rimski, broj);
            break;
        default:
            break;
    }
}

void pretvoriArapskiURimski(int arapski, char rimski[]) {
    int n = 1000, broj, i = 0;
    strcpy(rimski, "");
    while (i < 4) {
        broj = arapski / n;
        if (broj != 0) {
            dopuniRimski(rimski, broj, i);
        }
        i++;
        arapski = arapski % n;
        n = n / 10;
    }
}


// 2. nacin (bolji)

void arapski2rimski(int arapski, char *rimski){
    // Vrednosti rimskih cifri
    int vrednost[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
    // Simboli rimskih cifri
    char* simbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
    int i = 0;

    strcpy(rimski,"");                  // praznimo string rimski

    while (arapski){                    // dok je arapski broj razlicit od nule
        while (arapski/vrednost[i]){    // dok arapski sadrzi najvecu mogucu vrednost rimskih cifri
            strcat(rimski, simbol[i]);  // dodajemo simbol za tu vrednost stringu rimski
            arapski -= vrednost[i];     // smanjujemo arapski broj za vrednost dodate rimske cifre
        }
        i++;                            // prelazimo na sledecu vrednost rimske cifre
    }
}


int main(void) {

    //int arapski=11000;
    int arapski=2736;
    char rimski[100];

    printf("\n Arapski u rimski \n");
    pretvoriArapskiURimski(arapski,rimski);
    printf("\n %d = %s \n",arapski,rimski);

    arapski2rimski(arapski,rimski);
    printf("\n %d = %s \n",arapski,rimski);

    return 0;
}