logo

1 ile 3999 Arasındaki Ondalık Sayıyı Romen Rakamlarına Dönüştürme

GfG Practice'de deneyin ' title=

Bir tamsayı verildiğinde onu eşdeğer Roma rakamı gösterimine dönüştürün.

Not: Roma sembollerinin listesi aşağıdadır (çıkarma durumları dahil):

SembolDeğer
BEN1
IV4
V5
IX9
X10
XL40
L50
XC90
C100
CD400
D500
SANTİMETRE900
M1000

Örnekler: 



Giriş: 9
Çıkış: IX
Açıklama: 9, çıkarmalı gösterim kullanılarak Roma rakamlarıyla 'IX' olarak yazılır; daha küçük bir rakam, daha büyük bir rakamın önüne yerleştirilir.

css ile metnin altını çizmek
  • I= 1X= 10
  • IX10 - 1 = anlamına gelir 9

Giriş: 40
Çıkış: XL
Açıklama: 40, çıkarmalı gösterim kullanılarak Romen rakamlarıyla 'XL' olarak yazılır; daha küçük bir rakam, daha büyük bir rakamın önüne yerleştirilir.

  • X= 10L = 50
  • XL50 - 10 = anlamına gelir 40

[Genel Amaçlı Çözüm] - O(n) Zaman ve O(n) Uzay

Verilen sayıyı taban değerlerle 1000 900 500 400 100 90 50 40 10 9 5 4 1 sırasıyla karşılaştırın. Verilen sayıdan küçük olan en büyük taban değeri bulduğumuzda, sayıyı taban değere bölüyoruz ve daha küçük taban değerler ve bölüm için işlemi tekrarlıyoruz. Bulunan taban değere karşılık gelen roma sembolünü bölüme eşit olan sonuç sayısına ekliyoruz ve kalan için işlemi tekrarlıyoruz.

Yaklaşımı bir örnekle anlayalım 3549

Yineleme 1

java dizesini ikiye katlamak
  • 3549 >= 1000'den beri; başlangıçta en büyük taban değeri 1000 olacaktır.
  • 3549/1000'i bölün. Bölüm = 3 res = 'MMM' (Not M, 1000'e aittir)
  • Kalan = 549

Yineleme 2

  • 1000 > 549 >= 500; en büyük taban değeri 500 olacaktır.
  • 549/500'ü bölün. Ne zaman = 1 .res = '300'
  • Kalan = 49

Yineleme 3

  • 50 > 49 >= 40; en büyük taban değeri 40'tır.
  • 49/40'a bölün. Bölüm = 1 res = 'MMMDXL'
  • Kalan = 9.

Yineleme 4

  • Listede 9 numara mevcut. res = 'MMMDXL'
  • Kalan = 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)); 

Çıkış
MMMDXLIX

Zaman Karmaşıklığı: O(n) burada n, dönüşümü depolayan yanıt dizesinin uzunluğudur.
Yardımcı Alan: Açık)

bugüne kadar dönüştürücü dize

[Sınırlı Aralık İçin] - O(n) Zaman ve O(n) Uzay

Fikir, 0'dan 3999'a kadar sınırlı bir aralığa sahip olduğumuz gerçeğine dayanmaktadır. Binler, yüzler, onlar ve birler basamağına karşılık gelen rakamları ayırıyoruz ve ardından her rakamı, konumsal değerine dayalı olarak ilgili Roma rakamı eşdeğeriyle eşleştiriyoruz.

  • Farklı bölümler için M karakterinin eşlemelerini saklayın 0 1 2 3
  • 0'dan 9'a kadar olan farklı bölümler için CL ve I eşlemelerini saklayın.

Yukarıdaki eşlemeleri kullanarak doğrudan sonuç dizesini oluştururuz.

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

Çıkış
MMMDXLIX