Annetaan kokonaisluku muuntaa sen vastaavaksi roomalaiseksi numeromääräksi.
Huomaa: Seuraava on luettelo roomalaisista symboleista (mukaan lukien vähentyvät tapaukset):
| Symboli | Arvo |
|---|---|
| Minä | 1 |
| IV | 4 |
| V | 5 |
| Ix | 9 |
| X | 10 |
| XL | 40 |
| Lens | 50 |
| XC | 90 |
| C | 100 |
| CD | 400 |
| D -d | 500 |
| Cm | 900 |
| M | 1000 |
Esimerkkejä:
Tulo: 9
Lähtö: Ix
Selitys: 9 on kirjoitettu 'ix' roomalaisissa numeroissa, joissa käytetään vähentävää merkintää - sijoittamalla pienempi numero ennen suurempaa.avl puita
I= 1X= 10IXtarkoittaa 10 - 1 = 9Tulo: 40
Lähtö: XL
Selitys: 40 on kirjoitettu 'XL' roomalaisissa numeroissa, joissa käytetään vähentävää merkintää - asettamalla pienempi numero ennen suurempaa.
X= 10 L = 50XLtarkoittaa 50 - 10 = 40
[Yleiskäyttöinen ratkaisu] - O (n) aika ja O (n) -tila
Vertaa annettua lukumäärää kanta -arvoihin järjestyksessä 1000 900 500 400 100 90 50 40 10 9 5 4 1. Kun löydämme suurimman perusarvon, joka on pienempi kuin annettu luku, jaamme lukumäärän perusarvolla ja toistamme prosessin pienemmille perusarvoille ja osamäärälle. Lisäämme roomalaisen symbolin, joka vastaa tuloksen määrää, kuinka monta kertaa on yhtä suuri kuin osamäärä ja toistat prosessin loput.
Ymmärräkaamme lähestymistapa esimerkillä 3549
bfs vs dfs
Iteraatio 1
- Vuodesta 3549> = 1000; Suurin perusarvo on aluksi 1000.
- Jaa 3549/1000. Osamäärä = 3 res = 'mmm' (huomautus m kuuluu 1000: een)
- Loput = 549
Iteraatio 2
- 1000> 549> = 500; Suurin perusarvo on 500.
- Jaa 549/500. Aina kun = 1 .RES = '300'
- Loput = 49
Iteraatio 3
- 50> 49> = 40; Suurin perusarvo on 40.
- Jaa 49/40. Osamäärä = 1 res = 'mmmdxl'
- Loput = 9.
Iteraatio 4
- Numero 9 on läsnä luettelossa. res = 'mmmdxl'
- Loput = 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));
Tulos
MMMDXLIX
Ajan monimutkaisuus: O (n) missä n on muuntamisen tallentavan vastausmerkkijonon pituus.
Aputila: O (n)
shweta tiwari näyttelijä
[Rajoitetulle alueelle] - O (n) Time ja O (N) -tila
C++Idea perustuu siihen tosiasiaan, että meillä on rajoitettu alue peitetylle 0–3999. Eristämme numeroita, jotka vastaavat tuhansia satoja kymmeniä ja paikkoja ja kartoittamme sitten jokaisen numeron sen vastaavaan roomalaiseen numeroiden vastaavaan sen sijaintiarvon perusteella.
- Säilytä merkin M -kartoitukset eri osuuksille 0 1 2 3
- Säilytä C L: n ja I: n kartoitukset eri osuuksille. Muoto 0 - 9.
Yllä olevien kartoitusten avulla luomme suoraan tulosjonon.
#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));
Tulos
MMMDXLIX