logo

Decimālā skaita konvertēšana no 1 līdz 3999 par romiešu cipariem

Izmēģiniet to GFG praksē ' title=

Ņemot vērā veselu skaitli pārveidot to par līdzvērtīgu romiešu ciparu attēlojumu.

Piezīme: Šis ir romiešu simbolu saraksts (ieskaitot atņemšanas gadījumus):



SimbolsNovērtēt
EsViens
IV4
V5
Ix9
Netraucēts10
Xl40
Lukturis50
Xc90
C100
Kompaktdisks400
S500
Cm900
M1000

Piemēri: 

Ievade: 9
Izlaide: Ix
Paskaidrojums: 9 Romas ciparos, izmantojot atņemšanu, ir uzrakstīts kā “ix” - novietojot mazāku ciparu pirms lielāka.

izlaist sarakstu
  • I= 1X= 10
  • IXnozīmē 10 - 1 = 9

Ievade: 40
Izlaide: Xl
Paskaidrojums: 40 tiek uzrakstīts kā “XL” romiešu ciparos, izmantojot atņemšanas apzīmējumu - novietojot mazāku ciparu pirms lielāka.



  • X= 10 L = 50
  • XLnozīmē 50 - 10 = 40

[Vispārējā mērķa risinājums] - O (n) laiks un O (n) telpa

Salīdziniet doto skaitli ar bāzes vērtībām secībā 1000 900 500 400 100 90 50 40 10 9 5 4 1. Kad mēs atrodam lielāko bāzes vērtību, kas ir mazāka par norādīto skaitli, skaitli sadalām ar pamatvērtību un atkārtojam procesu mazākām bāzes vērtībām un koeficientam. Mēs pievienojam romiešu simbolu, kas atbilst bāzes vērtībai, kas konstatēta ar koeficientu, kas ir vienāds ar koeficientu, un atkārtojam procesu atlikušajai daļai.

python konvertē baitus par virkni

Ļaujiet mums izprast pieeju ar 3549 piemēru

Iterācija 1



  • Tā kā 3549> = 1000; Lielākā bāzes vērtība sākotnēji būs 1000.
  • Sadalīt 3549/1000. Quotient = 3 res = 'mmm' (piezīme M pieder 1000)
  • Atlikums = 549

Iterācija 2

  • 1000> 549> = 500; Lielākā bāzes vērtība būs 500.
  • Sadalīšana 549/500. Kad = 1 .res = '300'
  • Atlikums = 49

3. iterācija

  • 50> 49> = 40; Lielākā bāzes vērtība ir 40.
  • Sadaliet 49/40. Quotient = 1 res = 'mmmdxl'
  • Atlikums = 9.

Iterācija 4

  • 9. numurs ir sastopams sarakstā. res = 'mmmdxl'
  • Atlikums = 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)); 

Izvade
MMMDXLIX

Laika sarežģītība: O (n), kur n ir atbildes virknes garums, kas saglabā konvertēšanu.
Papildu telpa: O (n)

xor java

[Ierobežotam diapazonam] - O (n) laiks un O (n) telpa

Ideja ir balstīta uz faktu, ka mums ir ierobežots diapazons līdz slēptam no 0 līdz 3999. Mēs izolējam ciparus, kas atbilst tūkstošiem simtiem desmitiem un tām vietām, un pēc tam katra cipara kartēšanu uz tā attiecīgā romiešu skaitļa ekvivalentu, pamatojoties uz tās pozicionālo vērtību.

  • Uzglabājiet rakstzīmju M kartēšanu dažādiem koeficientiem 0 1 2 3
  • Uzglabājiet C L un I kartēšanu dažādiem koeficientiem no 0 līdz 9.

Izmantojot iepriekšminētās kartēšanas, mēs tieši ģenerējam rezultātu virkni.

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

Izvade
MMMDXLIX