logo

Pretvorba decimalne številke, ki leži med 1 in 3999 v rimske številke

Poskusite na praksi GFG ' title=

Glede na to, da ga je celo število pretvorilo v svojo enakovredno rimsko predstavitev številk.

Opomba: Sledi seznam rimskih simbolov (vključno z odvzetimi primeri):



SimbolVrednost
I1
Iv4
V5
Ix9
X10
Xl40
L50
Xc90
C100
CD400
D500
Cm900
M1000

Primeri: 

Vnos: 9
Izhod: Ix
Pojasnilo: 9 je v rimskih številkah napisan kot "IX" z uporabo odvzetih zapisov - postavitev manjše številke pred večjo.

vzorec javascripta
  • I= 1X= 10
  • IXpomeni 10 - 1 = 9

Vnos: 40
Izhod: Xl
Pojasnilo: 40 je v rimskih številkah napisan kot "xl" z uporabo odvzetih zapisov - postavitev manjše številke pred večjo.



css seznami
  • X= 10 l = 50
  • XLpomeni 50 - 10 = 40

[Rešitev splošnega namena] - o (n) čas in o (n) prostor

Primerjajte dano številko z osnovnimi vrednostmi v vrstnem redu 1000 900 500 400 100 90 50 40 10 9 5 4 1. Ko najdemo največjo osnovno vrednost, ki je manjša od dane številke, številko delimo z osnovno vrednostjo in ponovimo postopek za manjše osnovne vrednosti in količnik. Dodamo rimski simbol, ki ustreza osnovni vrednosti, ki jo najdemo v rezultatu, ki je enaka količina, in ponovimo postopek za preostanek.

Razumejmo pristop s primerom 3549

Iteracija 1



  • Od 3549> = 1000; Največja osnovna vrednost bo na začetku 1000.
  • Razdelite 3549/1000. Quotient = 3 res = 'mmm' (opomba m spada v 1000)
  • Preostanek = 549

Iteracija 2

  • 1000> 549> = 500; Največja osnovna vrednost bo 500.
  • Deli 549/500. Kadarkoli = 1 .res = '300'
  • Preostanek = 49

Iteracija 3

  • 50> 49> = 40; Največja osnovna vrednost je 40.
  • Razdelite 49/40. Quotient = 1 res = 'mmmdxl'
  • Preostanek = 9.

Iteracija 4

  • Številka 9 je prisotna na seznamu. res = 'mmmdxl'
  • Preostanek = 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)); 

Izhod
MMMDXLIX

Časovna kompleksnost: O (n) kjer je n dolžina niza odgovorov, ki shrani pretvorbo.
Pomožni prostor: O (n)

int v char

[Za omejen razpon] - o (n) čas in o (n) prostor

Ideja temelji na dejstvu, da imamo omejen razpon za prikrivanje od 0 do 3999. Številke, ki ustrezajo tisoč sto desetine in ena mest, izoliramo in nato vsako številko preslikamo z ustreznim rimskim enakovrednim ekvivalentom na podlagi njegove položajne vrednosti.

  • Shranjujte preslikave znaka M za različne količnike 0 1 2 3
  • Shranjujte preslikave C L in I za različne količnike tvorijo 0 do 9.

Z zgornjimi preslikavami neposredno ustvarimo niz rezultatov.

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)); 

Izhod
MMMDXLIX