logo

Romėniškų skaičių konvertavimas į sveikąjį skaičių

Pateikus eilutę romėniškos formos, užduotis yra konvertuoti šią nurodytą romėnišką eilutę į sveikąjį skaičių.

Romėniški skaitmenys yra pagrįsti šiais simboliais:



Simbolis

Vertė



kaip patikrinti monitoriaus ekrano dydį

1

IN

5



X

kolekcija java

10

L

penkiasdešimt

pramonė ir gamykla

C

100

D

500

kino aktorė Kajal

M

1000

Pavyzdys:

Įvestis: IX
Išvestis: 9
Paaiškinimas: IX yra romėnų simbolis, reiškiantis 9

Įvestis: XL
Išvestis: 40
Paaiškinimas: XL yra romėniškas simbolis, reiškiantis 40

Įvestis: MCMIV
Išvestis: 1904 m
Paaiškinimas: M yra tūkstantis, CM yra devyni šimtai ir IV yra keturi

Rekomenduojamos praktikos romėniškas skaičius iki sveikojo skaičiaus Išbandykite!

Metodas: Skaičius romėniškais skaitmenimis yra šių simbolių eilutė, parašyta mažėjančia tvarka (pvz., pirmas M, po to D ir kt.). Tačiau kai kuriais konkrečiais atvejais, siekiant išvengti keturių simbolių kartojimosi iš eilės (pvz., IIII arba XXXX), atimamasis žymėjimas dažnai naudojamas taip:

  • padėta prieš IN arba X nurodo vienu mažiau, taigi keturi yra IV (vienas mažesnis nei 5), o 9 yra IX (vienas mažesnis nei 10).
  • X padėta prieš L arba C nurodo dešimt mažiau, taigi keturiasdešimt yra XL (10 mažiau nei 50) ir 90 yra XC (dešimt mažiau nei šimtas).
  • C padėta prieš D arba M nurodo šimtu mažiau, taigi keturi šimtai yra CD (šimtas mažiau nei penki šimtai) ir devyni šimtai yra CM (šimtu mažiau nei tūkstančiu).

Algoritmas konvertuoti romėniškus skaitmenis į sveikuosius skaičius:

kaip java paversti sveikąjį skaičių į eilutę
  • Padalinkite romėniškų skaitmenų eilutę į romėniškus simbolius (simbolius).
  • Paverskite kiekvieną romėniškų skaitmenų simbolį į vertę, kurią jis reiškia.
  • Paimkite simbolį po vieną, pradedant nuo indekso 0:
    • Jei dabartinė simbolio reikšmė yra didesnė arba lygi kito simbolio reikšmei, pridėkite šią vertę prie einamosios sumos.
    • kitu atveju atimkite šią vertę, pridėdami kito simbolio vertę prie einamosios sumos.

Toliau pateikiamas aukščiau pateikto algoritmo įgyvendinimas:

C++
// 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) { // Dabartinio simbolio reikšmė // yra didesnė arba lygi // kitam simboliui res = res + s1;  } else { // Dabartinio simbolio reikšmė // mažesnė už kitą simbolį res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res; } // Tvarkyklės kodas int main() { // Atsižvelgiant į pateiktus įėjimus, yra tinkama eilutė 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) { // Dabartinio simbolio reikšmė // yra didesnė arba lygi // kitam simboliui res = res + s1;  } else { // Dabartinio simbolio reikšmė // mažesnė už kitą simbolį res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res; } // Tvarkyklės kodas int main() { // Atsižvelgiant į pateiktus įvesties duomenis, galioja char str[10] = 'MCMIV';  printf('Sveikoji romėniško skaičiaus forma yra %d',romanToDecimal(str));  grąžinti 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) { // Dabartinio simbolio reikšmė // yra didesnė arba lygi // kitam simboliui res = res + s1;  } else { // Dabartinio simbolio reikšmė // mažesnė už kitą simbolį res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res;  } // Tvarkyklės kodas public static void main(String args[]) { RomanToNumber ob = new RomanToNumber();  // Atsižvelgiant į pateiktus įėjimus, galioja String str = 'MCMIV';  System.out.println('Sveikoji romėniško skaičiaus forma' + ' yra ' + ob.romanToDecimal(str));  } }>>Python= s2): # Dabartinio simbolio reikšmė yra didesnė # arba lygi kitam simboliui res = res + s1 i = i + 1 else: # Dabartinio simbolio reikšmė yra didesnė # arba lygi kitam simboliui res = res + s2 - s1 i = i + 2 kitur: res = res + s1 i = i + 1 return res # Tvarkyklės kodas print('Sveikaoji romėniško skaičiaus forma yra'), print(romanToDecimal('MCMIV'))>'>C#= s2) { // Dabartinio simbolio reikšmė yra didesnė // arba lygi kitam simboliui res = res + s1;  } else { res = res + s2 - s1;  i++; // Dabartinio simbolio reikšmė // mažesnė už kitą simbolį } } else { res = res + s1;  i++;  } } return res;  } // Tvarkyklės kodas public static void Main(string[] args) { GFG ob = new GFG();  // Atsižvelgiant į pateiktus įėjimus, yra tinkama eilutė str = 'MCMIV';  Console.WriteLine('Sveikoji romėniško skaičiaus forma' + ' yra ' + ob.romanToDecimal(str));  } } // Šį kodą sukūrė Shrikant13>>Javascript= s2) { // Dabartinio simbolio reikšmė // yra didesnė arba lygi // kitam simboliui res = res + s1;  } else { // Dabartinio simbolio reikšmė // mažesnė už kitą simbolį res = res + s2 - s1;  i++;  } } else { res = res + s1;  } } return res;  } // Tvarkyklės kodas // Atsižvelgiant į pateiktus duomenis, galioja var str = 'MCMIV';  document.write('Sveikoji romėniško skaičiaus forma' + ' yra ' + romanToDecimal(str)); // Šį kodą sukūrė umadevi9616>>PHP= $s2) { // Dabartinio simbolio reikšmė // yra didesnė arba lygi // kitam simboliui $res = $res + $s1; } else { $res = $res + $s2 - $s1; $i++; // Dabartinio simbolio reikšmė // mažesnė už kitą simbolį } } else { $res = $res + $s1; $i++; } } return $res; } // Tvarkyklės kodas // Atsižvelgiant į įvestis // pateiktos galioja $str ='MCMIV'; echo 'Sveikoji romėniško skaičiaus forma yra ', romanToDecimal($str), '
'; // Šį kodą sukūrė ajit ?>>>  
Išvestis Sudėtingumo analizė:

  • Laiko sudėtingumas: O(n), kur n yra eilutės ilgis.
    Reikalingas tik vienas eilutės perėjimas.
  • Pagalbinė erdvė: O(1), nes nereikia papildomos vietos.