Kun on annettu roomalainen merkkijono, tehtävänä on muuntaa tämä annettu roomalainen merkkijono kokonaisluvuksi.
roomalaiset numerot perustuvat seuraaviin symboleihin:
| Symboli | Arvo | 
|---|---|
| minä binäärihakupuu vs binääripuu | 1 | 
| SISÄÄN | 5 | 
| X jos muuten lauseke javassa | 10 | 
| L | viisikymmentä | 
| C | 100 mysql-määrä | 
| D | 500 | 
| M | 1000 merkkijonon muuntaminen int javaksi | 
Esimerkki:
Suositeltu harjoitus roomalaisesta numerosta kokonaisluvuksi Kokeile!Syöte: IX
Lähtö: 9
Selitys: IX on roomalainen symboli, joka edustaa numeroa 9Syöte: XL
Lähtö: 40
Selitys: XL on roomalainen symboli, joka edustaa numeroa 40Syöte: MCMIV
Lähtö: 1904
Selitys: M on tuhat, CM on yhdeksänsataa ja IV on neljä
Lähestyä: Roomalaisilla numeroilla oleva numero on merkkijono, joka on kirjoitettu laskevassa järjestyksessä (esim. ensin M, sen jälkeen D jne.). Kuitenkin joissakin erityistapauksissa, jotta vältetään neljän merkin toistuminen peräkkäin (kuten IIII tai XXXX), vähentävä merkintä käytetään usein seuraavasti:
- minä sijoitettu ennen SISÄÄN tai X tarkoittaa yhtä vähemmän, joten neljä on IV (yksi pienempi kuin 5) ja 9 on IX (yksi vähemmän kuin 10).
- X sijoitettu ennen L tai C tarkoittaa kymmenen vähemmän, joten neljäkymmentä on XL (10 vähemmän kuin 50) ja 90 on XC (kymmenen vähemmän kuin sata).
- C sijoitettu ennen D tai M tarkoittaa sataa vähemmän, joten neljäsataa on CD (sata alle viisisataa) ja yhdeksänsataa on CM (sata vähemmän kuin tuhat).
Algoritmi roomalaisten numeroiden muuntamiseksi kokonaisluvuiksi:
- Jaa roomalainen numeromerkkijono roomalaisiksi symboleiksi (merkiksi).
- Muunna jokainen roomalaisten numeroiden symboli arvoksi, jota se edustaa.
- Ota symboli yksitellen indeksistä 0 alkaen:
- Jos symbolin nykyinen arvo on suurempi tai yhtä suuri kuin seuraavan symbolin arvo, lisää tämä arvo juoksevaan summaan.
- muuten vähennä tämä arvo lisäämällä seuraavan symbolin arvo juoksevaan summaan.
Seuraavassa on yllä olevan algoritmin toteutus:
lausunnon tulostaminen javassaC++
 // Program to convert Roman // Numerals to Numbers #include  using namespace std; // This function returns value // of a Roman symbol int value(char r) {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1; } // Returns decimal value of // roman numaral int romanToDecimal(string& str) {  // Initialize result  int res = 0;  // Traverse given input  for (int i = 0; i < str.length(); i++) {  // Getting value of symbol s[i]  int s1 = value(str[i]);  if (i + 1 < str.length()) {  // Getting value of symbol s[i+1]  int s2 = value(str[i + 1]);  // Comparing both values  if (s1>= s2) { // Nykyisen symbolin arvo // on suurempi tai yhtä suuri kuin // seuraava symboli res = res + s1;  } else { // Nykyisen symbolin arvo on // pienempi kuin seuraavan symbolin res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res; } // Ohjainkoodi int main() { // Ottaen huomioon annetut syötteet ovat kelvollisia str = 'MCMIV';  cout<< 'Integer form of Roman Numeral is '  << romanToDecimal(str) << endl;  return 0; }> C // Program to convert Roman // Numerals to Numbers #include  #include  // This function returns value // of a Roman symbol int value(char r) {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1; } // Returns decimal value of // roman numaral int romanToDecimal(char str[]) {  // Initialize result  int res = 0;  // Traverse given input  for (int i = 0; i < strlen(str); i++)  {  // Getting value of symbol s[i]  int s1 = value(str[i]);  if (i + 1 < strlen(str))  {  // Getting value of symbol s[i+1]  int s2 = value(str[i + 1]);  // Comparing both values  if (s1>= s2) { // Nykyisen symbolin arvo // on suurempi tai yhtä suuri kuin // seuraava symboli res = res + s1;  } else { // Nykyisen symbolin arvo on // pienempi kuin seuraavan symbolin res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res; } // Ohjainkoodi int main() { // Ottaen huomioon annetut syötteet ovat kelvollisia char str[10] = 'MCMIV';  printf('Roomalaisen numeron kokonaislukumuoto on %d',romanToDecimal(str));  paluu 0; }> Java // Program to convert Roman // Numerals to Numbers import java.util.*; public class RomanToNumber {  // This function returns  // value of a Roman symbol  int value(char r)  {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1;  }  // Finds decimal value of a  // given roman numeral  int romanToDecimal(String str)  {  // Initialize result  int res = 0;  for (int i = 0; i < str.length(); i++) {  // Getting value of symbol s[i]  int s1 = value(str.charAt(i));  // Getting value of symbol s[i+1]  if (i + 1 < str.length()) {  int s2 = value(str.charAt(i + 1));  // Comparing both values  if (s1>= s2) { // Nykyisen symbolin arvo // on suurempi tai yhtä suuri kuin // seuraava symboli res = res + s1;  } else { // Nykyisen symbolin arvo on // pienempi kuin seuraavan symbolin res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res;  } // Ohjainkoodi public static void main(String args[]) { RomanToNumber ob = new RomanToNumber();  // Ottaen huomioon annetut syötteet ovat kelvollisia String str = 'MCMIV';  System.out.println('Roomalaisen numeron kokonaislukumuoto' + ' on ' + ob.romanToDecimal(str));  } }> Python # Python program to convert Roman Numerals # to Numbers # This function returns value of each Roman symbol def value(r): if (r == 'I'): return 1 if (r == 'V'): return 5 if (r == 'X'): return 10 if (r == 'L'): return 50 if (r == 'C'): return 100 if (r == 'D'): return 500 if (r == 'M'): return 1000 return -1 def romanToDecimal(str): res = 0 i = 0 while (i < len(str)): # Getting value of symbol s[i] s1 = value(str[i]) if (i + 1 < len(str)): # Getting value of symbol s[i + 1] s2 = value(str[i + 1]) # Comparing both values if (s1>= s2): # Nykyisen symbolin arvo on suurempi # tai yhtä suuri kuin seuraava symboli res = res + s1 i = i + 1 else: # Nykyisen symbolin arvo on suurempi # tai yhtä suuri kuin seuraava symboli res = res + s2 - s1 i = i + 2 else: res = res + s1 i = i + 1 return res # Ohjainkoodi print('Roomalaisen numeron kokonaislukumuoto on'), print(romanToDecimal('MCMIV'))>'>C#= s2) { // Nykyisen symbolin arvo on suurempi // tai yhtä suuri kuin seuraava symboli res = res + s1;  } else { res = res + s2 - s1;  i++; // Nykyisen symbolin arvo on // pienempi kuin seuraava symboli } } else { res = res + s1;  i++;  } } return res;  } // Ohjainkoodi public static void Main(string[] args) { GFG ob = new GFG();  // Annetut syötteet ovat kelvollisia str = 'MCMIV';  Console.WriteLine('Roomalaisen numeron kokonaislukumuoto' + ' on ' + ob.romanToDecimal(str));  } } // Tämän koodin on toimittanut Shrikant13>> Javascript= s2) { // Nykyisen symbolin arvo // on suurempi tai yhtä suuri kuin // seuraava symboli res = res + s1;  } else { // Nykyisen symbolin arvo on // pienempi kuin seuraavan symbolin res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res;  } // Ohjainkoodi // Ottaen huomioon annetut syötteet ovat kelvollisia var str = 'MCMIV';  document.write('Roomalaisen numeron kokonaislukumuoto' + ' on ' + romanToDecimal(str)); // Tämän koodin tarjoaa umadevi9616>> PHP= $s2) { // Nykyisen symbolin arvo // on suurempi tai yhtä suuri kuin // seuraava symboli $res = $res + $s1; } else { $res = $res + $s2 - $s1; $i++; // Nykyisen symbolin arvo on // pienempi kuin seuraava symboli } } else { $res = $res + $s1; $i++; } } return $res; } // Ohjainkoodi // Ottaen huomioon syötteet // annetut ovat kelvollisia $str ='MCMIV'; echo 'Roomalaisen numeron kokonaislukumuoto on ', romanToDecimal($str), '
'; // Tämän koodin tarjoaa ajit ?>>>    Lähtö
Integer form of Roman Numeral is 1904>
Monimutkaisuusanalyysi:
-     Aika monimutkaisuus:    O(n), missä n on merkkijonon pituus.  
 Vain yksi merkkijonon läpikulku vaaditaan.
-     Aputila:    O(1), Koska lisätilaa ei tarvita.  
