logo

Dešimtainio skaičiaus konvertavimas nuo 1 iki 3999 iki romėniškų skaitmenų

Išbandykite tai GFG praktikoje ' title=

Atsižvelgiant į sveikąjį skaičių, paversti jį lygiaverčiu romėniško skaičiaus vaizdavimu.

Pastaba: Toliau pateiktas romėniškų simbolių sąrašas (įskaitant atimamus atvejus):



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

Pavyzdžiai: 

Įvestis: 9
Išvestis: Ix
Paaiškinimas: 9 yra parašytas kaip „IX“ romėniškuose skaitmenimis, naudojant atimamą žymėjimą - mažesnio skaičiaus dedamas prieš didesnį.

vietos datos laikas java
  • I= 1X= 10
  • IXreiškia 10 - 1 = 9

Įvestis: 40
Išvestis: Xl
Paaiškinimas: 40 yra parašytas kaip „XL“ romėniškuose skaitmenimis, naudojant atimamą žymėjimą - padėkite mažesnį skaičių prieš didesnį.



  • X= 10 L = 50
  • XLreiškia 50 - 10 = 40

[Bendrosios paskirties sprendimas] - o (n) laikas ir o (n) erdvė

Palyginkite nurodytą skaičių su bazinėmis vertėmis 1000 900 500 400 100 90 50 40 10 9 5 4 1. Kai randame didžiausią bazinę vertę, kuri yra mažesnė už nurodytą skaičių, mes padalijame skaičių su bazine verte ir pakartokite procesą mažesnėms bazinėms vertėms ir koeficientui. Pridedame romėnišką simbolį, atitinkantį bazinę vertę, rastą iki rezultato skaičiaus, lygų koeficientui, ir pakartokite likusių procesą.

Supraskime požiūrį su 3549 pavyzdžiu

abstrakčioji klasė java

1 iteracija



  • Nuo 3549> = 1000; Didžiausia bazinė vertė iš pradžių bus 1000.
  • Padalinkite 3549/1000. Koeficientas = 3 res = 'mmm' (pastaba M priklauso 1000)
  • Likusi dalis = 549

2 iteracija

  • 1000> 549> = 500; Didžiausia bazinė vertė bus 500.
  • Padalinkite 549/500. Kai = 1 .res = '300'
  • Likusi dalis = 49

3 iteracija

  • 50> 49> = 40; Didžiausia bazinė vertė yra 40.
  • Padalinkite 49/40. Koeficientas = 1 res = 'mmmdxl'
  • Likusi = 9.

4 iteracija

  • Nr. 9 yra sąraše. res = 'mmmdxl'
  • Likusi dalis = 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)); 

Išvestis
MMMDXLIX

Laiko sudėtingumas: O (n) kur n yra atsakymo eilutės ilgis, kuris kaupia konversiją.
Pagalbinė erdvė: O (n)

eilučių formatavimas java

[Riboto diapazono] - o (n) laiko ir o (n) erdvei

Idėja grindžiama tuo, kad turime ribotą diapazoną nuo nuo 0 iki 3999. Mes išskiriame skaitmenis, atitinkančius tūkstančius šimtų dešimčių vietų, o po to kiekvienam skaitmeniui žemėlapyje pateikiami pagal atitinkamą romėnišką skaičių ekvivalentą pagal jo padėties vertę.

  • Saugokite M simbolio m ratukai skirtingiems koeficientams 0 1 2 3
  • Saugokite C L ir I žemėlapius skirtingiems koeficientams nuo 0 iki 9.

Naudodami aukščiau pateiktus žemėlapius, mes tiesiogiai sugeneruojame rezultato eilutę.

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

Išvestis
MMMDXLIX