Având în vedere că un număr întreg îl transformă în reprezentarea sa romană echivalentă.
Nota: Urmează lista simbolurilor romane (inclusiv cazurile subtractive):
| Simbol | Valoare |
|---|---|
| I | 1 |
| Iv | 4 |
| V | 5 |
| Ix | 9 |
| X | 10 |
| XL | 40 |
| L | 50 |
| Xc | 90 |
| C. | 100 |
| CD | 400 |
| D. | 500 |
| CM | 900 |
| M | 1000 |
Exemple:
Intrare: 9
Ieșire: Ix
Explicaţie: 9 este scris ca „IX” în cifre romane folosind notație subtractivă - plasând un număr mai mic înainte de una mai mare.java catch try
I= 1X= 10IXînseamnă 10 - 1 = 9Intrare: 40
Ieșire: XL
Explicaţie: 40 este scris ca „XL” în cifre romane folosind notație subtractivă - plasând un număr mai mic înainte de una mai mare.
X= 10 L = 50XLînseamnă 50 - 10 = 40
[Soluție de scop general] - O (n) timp și spațiu O (n)
Comparați numărul dat cu valorile de bază în ordinea 1000 900 500 400 100 90 50 40 10 9 5 4 1. Odată ce găsim cea mai mare valoare de bază care este mai mică decât numărul dat, împărțim numărul cu valoarea de bază și repetăm procesul pentru valori de bază mai mici și coeficient. Adăugăm simbolul roman corespunzător valorii de bază găsite la numărul de rezultate egal cu coeficientul și repetăm procesul pentru restul.
java adauga la o matrice
Să înțelegem abordarea cu un exemplu 3549
Iterație 1
- Din 3549> = 1000; Cea mai mare valoare de bază va fi 1000 inițial.
- Împărțiți 3549/1000. Quotient = 3 res = 'mmm' (nota m aparține 1000)
- Restul = 549
Iterație 2
- 1000> 549> = 500; Cea mai mare valoare de bază va fi de 500.
- Împărțiți 549/500. Ori de câte ori = 1 .res = '300'
- Restul = 49
Iterație 3
- 50> 49> = 40; Cea mai mare valoare de bază este de 40.
- Împărțiți 49/40. Coeficient = 1 res = 'mmmdxl'
- Restul = 9.
Iterație 4
- Numărul 9 este prezent în listă. res = 'mmmdxl'
- Rest = 0.
#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));
Ieșire
MMMDXLIX
Complexitate a timpului: O (n) unde n este lungimea șirului de răspuns care stochează conversia.
Spațiu auxiliar: Pe)
metoda equals în java
[Pentru o gamă limitată] - O (n) timp și spațiu O (n)
C++Ideea se bazează pe faptul că avem o gamă limitată pentru a ascunde 0 până la 3999. Izolăm cifrele corespunzătoare mii de sute de zeci și locuri și apoi cartografierea fiecărei cifre la echivalentul său roman respectiv pe baza valorii sale poziționale.
- Stocați mapări de caracter m pentru diferiți qurienți 0 1 2 3
- Stocați mapări de C L și I pentru diferite coeficienturi formularul 0 până la 9.
Folosind mapările de mai sus, generăm direct șirul de rezultate.
#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));
Ieșire
MMMDXLIX