/*
Rimski broj u arapski 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
http://www.cquestions.com/2011/08/c-program-to-convert-roman-number-to.html
Napisati funkciju koja za uneti rimski broj prikazuje odgovarajuci arapski 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 vrednost leve znamenke manja od desne,
onda se vrednost leve znamenke oduzima od vrednosti 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>
int vratiZnak(char string[], int i) {
int znak = 1;
if (string[i] == 'I' && (string[i + 1] == 'V' || string[i + 1] == 'X'))
znak = -1;
if (string[i] == 'X' && (string[i + 1] == 'L' || string[i + 1] == 'C'))
znak = -1;
if (string[i] == 'C' && (string[i + 1] == 'D' || string[i + 1] == 'M'))
znak = -1;
return znak;
}
int vratiCifru(char c) {
int cifra;
switch (c) {
case 'I': cifra = 1;
break;
case 'V': cifra = 5;
break;
case 'X': cifra = 10;
break;
case 'L': cifra = 50;
break;
case 'C': cifra = 100;
break;
case 'D': cifra = 500;
break;
case 'M': cifra = 1000;
break;
default: cifra = 0;
break;
}
return cifra;
}
int vratiArapskiBroj(char rimski[]) {
int i, broj = 0;
for (i = 0; i < strlen(rimski); i++) {
broj += vratiZnak(rimski, i) * vratiCifru(rimski[i]);
}
return broj;
}
int main(void) {
int arapski;
char rimski[100];
strcpy(rimski,"MMDCCXXXVI");
printf("\n Rimski u arapski \n");
arapski = vratiArapskiBroj(rimski);
printf("\n %s = %d \n", rimski, arapski );
return 0;
}