Az 1 és 3999 között fekvő tizedes szám konvertálása római számokká
Adva egy egész szám, átalakítva azt ekvivalens római szám ábrázolásává.
Jegyzet: Az alábbiakban felsoroljuk a római szimbólumok listáját (beleértve a szubtraktív eseteket):
| Szimbólum | Érték |
|---|---|
| én | 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 |
Példák:
Bemenet: 9
Kimenet: IX
Magyarázat: A 9. számú római számban „IX” -nek írják, szubtraktív jelöléssel - egy kisebb számot helyezve egy nagyobb előtt.
I= 1X= 10IXjelentése 10 - 1 = 9Bemenet: 40
Kimenet: XL
Magyarázat: A 40 -et „XL” -nek írják a római számokban, szubtraktív jelöléssel - egy kisebb számot helyezve egy nagyobb előtt.
X= 10 L = 50XLazt jelenti, hogy 50 - 10 = 40
[Általános célú megoldás] - o (n) idő és o (n) tér
Hasonlítsa össze a megadott számot az alapértékekkel az 1000 900 500 400 100 90 50 40 10 9 5 4 1 sorrendben. Miután megtaláljuk a legnagyobb alapértéket, amely kevesebb, mint az adott szám, megosztjuk a számot az alapértékkel, és ismételjük meg a folyamatot a kisebb alapértékek és a hányados számára. Hozzáadjuk a római szimbólumot, amely megfelel az alapértéknek, amely a hányadosnak megegyezik az eredményszámhoz, és ismételje meg a fennmaradó folyamatot.
Értsük meg a megközelítést egy 3549 példa segítségével
Iteráció 1
- Mivel 3549> = 1000; A legnagyobb alapérték kezdetben 1000 lesz.
- Ossza meg a 3549/1000 -et. Hányados = 3 res = 'mmm' (az m megjegyzés 1000 -hez tartozik)
- Maradék = 549
Iteráció 2
- 1000> 549> = 500; A legnagyobb alapérték 500 lesz.
- Ossza meg az 549/500 -at. Bármikor = 1 .res = '300'
- Maradék = 49
Iteráció 3
- 50> 49> = 40; A legnagyobb alapérték 40.
- Ossza meg a 49/40 -et. Hányados = 1 res = 'mmmdxl'
- Maradék = 9.
Iteráció 4
- A 9. szám jelen van a listán. res = 'mmmdxl'
- Maradék = 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 ));
Kibocsátás
MMMDXLIX
Idő bonyolultsága: O (n), ahol n a válasz karakterlánc hossza, amely tárolja az átalakítást.
Kiegészítő hely: On)
[Korlátozott tartományhoz] - o (n) idő és o (n) tér
C++Az ötlet azon a tényen alapul, hogy korlátozott tartományunk van a 0–3999 -es rejtettséghez. Elkülönítjük a több ezer száz tíz és egy helynek megfelelő számjegyeket, majd az egyes számjegyeket a római szám ekvivalensére helyezi, pozicionális értéke alapján.
- Tárolja az M karakter leképezését a különböző hányadosokhoz 0 1 2 3
- Tárolja a C L és I leképezését a különböző hányadosokhoz 0–9.
A fenti leképezések segítségével közvetlenül generáljuk az eredményhúrot.
#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 ));
Kibocsátás
MMMDXLIX