logo

Conversion d'un nombre décimal compris entre 1 et 3999 en chiffres romains

Essayez-le sur GfG Practice ' title=

Étant donné un nombre entier, convertissez-le en sa représentation équivalente en chiffres romains.

Note: Voici la liste des symboles romains (y compris les cas soustractifs) :



SymboleValeur
je1
IV4
V5
IX9
X10
XL40
L50
XC90
C100
CD400
D500
CM900
M1000

Exemples : 

Saisir: 9
Sortir: IX
Explication: 9 s'écrit « IX » en chiffres romains en utilisant la notation soustractive — en plaçant un chiffre plus petit avant un plus grand.

point numpy
  • I= 1X= 10
  • IXsignifie 10 - 1 = 9

Saisir: 40
Sortir: XL
Explication: 40 s'écrit « XL » en chiffres romains en utilisant la notation soustractive – en plaçant un chiffre plus petit avant un plus grand.



changer de Java
  • X= 10 L = 50
  • XLsignifie 50 - 10 = 40

[Solution à usage général] - O(n) Temps et O(n) Espace

Comparez le nombre donné avec les valeurs de base dans l'ordre 1000 900 500 400 100 90 50 40 10 9 5 4 1. Une fois que nous avons trouvé la plus grande valeur de base inférieure au nombre donné, nous divisons le nombre avec la valeur de base et répétons le processus pour des valeurs de base et un quotient plus petits. Nous ajoutons le symbole romain correspondant à la valeur de base trouvée au résultat un nombre de fois égal au quotient et répétons le processus pour le reste.

Comprenons l'approche avec un exemple 3549

Itération 1



  • Depuis 3549 >= 1000 ; la plus grande valeur de base sera initialement de 1 000.
  • Divisez 3549/1000. Quotient = 3 res = 'MMM' (Note M appartient à 1000)
  • Reste = 549

Itération 2

  • 1000 > 549 >= 500 ; la plus grande valeur de base sera de 500.
  • Divisez 549/500. Chaque fois = 1 .res = '300'
  • Reste = 49

Itération 3

  • 50 > 49 >= 40 ; la plus grande valeur de base est 40.
  • Divisez 49/40. Quotient = 1 res = 'MMMDXL'
  • Reste = 9.

Itération 4

  • Le numéro 9 est présent dans la liste. res = 'MMMDXL'
  • Reste = 0.
C++
#include    using namespace std; // Function to convert decimal to Roman Numerals string toRoman(int x) {  // array of values and symbols  vector<int> base = {1 4 5 9 10 40 50 90 100 400 500 900 1000};  vector<string> sym = {'I' 'IV' 'V' 'IX' 'X' 'XL' 'L' 'XC' 'C' 'CD' 'D' 'CM' 'M'};  // to store result  string res = '';  // Loop from the right side to find  // the largest smaller base value  int i = base.size() - 1;  while (x > 0) {  int div = x / base[i];  while (div) {  res += sym[i];  div--;  }    // Repeat the process for remainder  x = x % base[i];    i--;  }  return res; } int main() {  int x = 3549;  cout << toRoman(x);  return 0; } 
Java
// Function to convert decimal to Roman Numerals public class RomanConverter {  public static String toRoman(int x) {    // array of values and symbols  int[] base = {1 4 5 9 10 40 50 90 100 400 500 900 1000};  String[] sym = {'I' 'IV' 'V' 'IX' 'X' 'XL' 'L' 'XC' 'C' 'CD' 'D' 'CM' 'M'};  // to store result  StringBuilder res = new StringBuilder();  // Loop from the right side to find  // the largest smaller base value  int i = base.length - 1;  while (x > 0) {  int div = x / base[i];  while (div > 0) {  res.append(sym[i]);  div--;  }    // Repeat the process for remainder  x = x % base[i];  i--;  }  return res.toString();  }  public static void main(String[] args) {  int x = 3549;  System.out.println(toRoman(x));  } } 
Python
# Function to convert decimal to Roman Numerals def to_roman(x): # array of values and symbols base = [1 4 5 9 10 40 50 90 100 400 500 900 1000] sym = ['I' 'IV' 'V' 'IX' 'X' 'XL' 'L' 'XC' 'C' 'CD' 'D' 'CM' 'M'] # to store result res = '' # Loop from the right side to find # the largest smaller base value i = len(base) - 1 while x > 0: div = x // base[i] while div: res += sym[i] div -= 1 # Repeat the process for remainder x %= base[i] i -= 1 return res x = 3549 print(to_roman(x)) 
C#
// Function to convert decimal to Roman Numerals public class RomanConverter {  public static string ToRoman(int x) {    // array of values and symbols  int[] baseValues = {1 4 5 9 10 40 50 90 100 400 500 900 1000};  string[] symbols = {'I' 'IV' 'V' 'IX' 'X' 'XL' 'L' 'XC' 'C' 'CD' 'D' 'CM' 'M'};  // to store result  string res = '';  // Loop from the right side to find  // the largest smaller base value  int i = baseValues.Length - 1;  while (x > 0) {  int div = x / baseValues[i];  while (div > 0) {  res += symbols[i];  div--;  }    // Repeat the process for remainder  x %= baseValues[i];  i--;  }  return res;  }  public static void Main() {  int x = 3549;  Console.WriteLine(ToRoman(x));  } } 
JavaScript
// Function to convert decimal to Roman Numerals function toRoman(x) {    // array of values and symbols  const base = [1 4 5 9 10 40 50 90 100 400 500 900 1000];  const sym = ['I' 'IV' 'V' 'IX' 'X' 'XL' 'L' 'XC' 'C' 'CD' 'D' 'CM' 'M'];  // to store result  let res = '';  // Loop from the right side to find  // the largest smaller base value  let i = base.length - 1;  while (x > 0) {  let div = Math.floor(x / base[i]);  while (div) {  res += sym[i];  div--;  }    // Repeat the process for remainder  x %= base[i];  i--;  }  return res; } let x = 3549; console.log(toRoman(x)); 

Sortir
MMMDXLIX

Complexité temporelle : O(n) où n est la longueur de la chaîne de réponse qui stocke la conversion.
Espace auxiliaire : Sur)

instruction if else en java

[Pour une portée limitée] - O(n) Temps et O(n) Espace

L'idée est basée sur le fait que nous disposons d'une plage limitée pour convertir 0 à 3999. Nous isolons les chiffres correspondant aux milliers de centaines de dizaines et de unités, puis mappons chaque chiffre à son équivalent en chiffres romains respectif en fonction de sa valeur de position.

  • Stocker les mappages du caractère M pour différents quotients 0 1 2 3
  • Stockez les mappages de C L et I pour différents quotients de 0 à 9.

En utilisant les mappages ci-dessus, nous générons directement la chaîne de résultat.

C++
#include    using namespace std; // Function to convert decimal to Roman Numerals string toRoman(int val) {   // storing roman values of digits from 0-9  // when placed at different places  vector<string> m = {'' 'M' 'MM' 'MMM'};  vector<string> c = {'' 'C' 'CC' 'CCC' 'CD'  'D' 'DC' 'DCC' 'DCCC' 'CM'};  vector<string> x = {'' 'X' 'XX' 'XXX' 'XL'  'L' 'LX' 'LXX' 'LXXX' 'XC'};  vector<string> i = {'' 'I' 'II' 'III' 'IV'  'V' 'VI' 'VII' 'VIII' 'IX'};  // Converting to roman  string thousands = m[val / 1000];  string hundreds = c[(val % 1000) / 100];  string tens = x[(val % 100) / 10];  string ones = i[val % 10];  string ans = thousands + hundreds + tens + ones;  return ans; } int main() {  int val = 3549;  cout << toRoman(val);  return 0; } 
Java
import java.util.*; public class GfG {  // Function to convert decimal to Roman Numerals  public static String toRoman(int val) {   // storing roman values of digits from 0-9  // when placed at different places  String[] m = {'' 'M' 'MM' 'MMM'};  String[] c = {'' 'C' 'CC' 'CCC' 'CD'  'D' 'DC' 'DCC' 'DCCC' 'CM'};  String[] x = {'' 'X' 'XX' 'XXX' 'XL'  'L' 'LX' 'LXX' 'LXXX' 'XC'};  String[] i = {'' 'I' 'II' 'III' 'IV'  'V' 'VI' 'VII' 'VIII' 'IX'};  // Converting to roman  String thousands = m[val / 1000];  String hundreds = c[(val % 1000) / 100];  String tens = x[(val % 100) / 10];  String ones = i[val % 10];  String ans = thousands + hundreds + tens + ones;  return ans;  }  public static void main(String[] args) {  int val = 3549;  System.out.println(toRoman(val));  } } 
Python
# Function to convert decimal to Roman Numerals def toRoman(val): # storing roman values of digits from 0-9 # when placed at different places m = ['' 'M' 'MM' 'MMM'] c = ['' 'C' 'CC' 'CCC' 'CD' 'D' 'DC' 'DCC' 'DCCC' 'CM'] x = ['' 'X' 'XX' 'XXX' 'XL' 'L' 'LX' 'LXX' 'LXXX' 'XC'] i = ['' 'I' 'II' 'III' 'IV' 'V' 'VI' 'VII' 'VIII' 'IX'] # Converting to roman thousands = m[val // 1000] hundreds = c[(val % 1000) // 100] tens = x[(val % 100) // 10] ones = i[val % 10] ans = thousands + hundreds + tens + ones return ans if __name__ == '__main__': val = 3549 print(toRoman(val)) 
C#
using System; public class GfG {  // Function to convert decimal to Roman Numerals  public static string toRoman(int val) {   // storing roman values of digits from 0-9  // when placed at different places  string[] m = {'' 'M' 'MM' 'MMM'};  string[] c = {'' 'C' 'CC' 'CCC' 'CD'  'D' 'DC' 'DCC' 'DCCC' 'CM'};  string[] x = {'' 'X' 'XX' 'XXX' 'XL'  'L' 'LX' 'LXX' 'LXXX' 'XC'};  string[] i = {'' 'I' 'II' 'III' 'IV'  'V' 'VI' 'VII' 'VIII' 'IX'};  // Converting to roman  string thousands = m[val / 1000];  string hundreds = c[(val % 1000) / 100];  string tens = x[(val % 100) / 10];  string ones = i[val % 10];  string ans = thousands + hundreds + tens + ones;  return ans;  }  public static void Main(string[] args) {  int val = 3549;  Console.WriteLine(toRoman(val));  } } 
JavaScript
// Function to convert decimal to Roman Numerals function toRoman(val) {   // storing roman values of digits from 0-9  // when placed at different places  let m = ['' 'M' 'MM' 'MMM'];  let c = ['' 'C' 'CC' 'CCC' 'CD'  'D' 'DC' 'DCC' 'DCCC' 'CM'];  let x = ['' 'X' 'XX' 'XXX' 'XL'  'L' 'LX' 'LXX' 'LXXX' 'XC'];  let i = ['' 'I' 'II' 'III' 'IV'  'V' 'VI' 'VII' 'VIII' 'IX'];  // Converting to roman  let thousands = m[Math.floor(val / 1000)];  let hundreds = c[Math.floor((val % 1000) / 100)];  let tens = x[Math.floor((val % 100) / 10)];  let ones = i[val % 10];  let ans = thousands + hundreds + tens + ones;  return ans; } let val = 3549; console.log(toRoman(val)); 

Sortir
MMMDXLIX