logo

تحويل الأرقام العشرية الواقعة بين 1 إلى 3999 إلى أرقام رومانية

جربه على ممارسة GfG ' title=

بالنظر إلى عدد صحيح، قم بتحويله إلى تمثيل الأرقام الرومانية المكافئ له.

ملحوظة: فيما يلي قائمة الرموز الرومانية (بما في ذلك حالات الطرح):



رمزقيمة
أنا1
رابعا4
V5
تاسعا9
X10
XL40
ل50
XC90
ج100
قرص مضغوط400
د500
سم900
م1000

أمثلة: 

مدخل: 9
الإخراج: تاسعا
توضيح: تتم كتابة الرقم 9 كـ "IX" بالأرقام الرومانية باستخدام تدوين الطرح - حيث يتم وضع رقم أصغر قبل رقم أكبر.

  • I= 1X= 10
  • IXيعني 10 - 1 = 9

مدخل: 40
الإخراج: XL
توضيح: تتم كتابة الرقم 40 كـ "XL" بالأرقام الرومانية باستخدام تدوين الطرح - حيث يتم وضع رقم أصغر قبل رقم أكبر.



  • X= 10 لتر = 50
  • XLيعني 50 - 10 = 40

[حل للأغراض العامة] - O(n) الوقت وO(n) الفضاء

قارن رقمًا معينًا بالقيم الأساسية بالترتيب 1000 900 500 400 100 90 50 40 10 9 5 4 1. بمجرد العثور على أكبر قيمة أساسية أقل من الرقم المحدد، نقسم الرقم على القيمة الأساسية ونكرر العملية للحصول على قيم أساسية وحاصل أصغر. نضيف الرمز الروماني المقابل للقيمة الأساسية التي تم العثور عليها إلى النتيجة عدد المرات التي تساوي حاصل القسمة ونكرر العملية للباقي.

دعونا نفهم النهج مع مثال 3549

التكرار 1



  • منذ 3549 >= 1000 ; أكبر قيمة أساسية ستكون 1000 في البداية.
  • قسمة 3549/1000. حاصل القسمة = 3 الدقة = 'MMM' (ملاحظة M تنتمي إلى 1000)
  • الباقي = 549

التكرار 2

  • 1000 > 549 >= 500 ; أكبر قيمة أساسية ستكون 500.
  • قسمة 549/500. كلما = 1 .res = '300'
  • الباقي = 49

التكرار 3

  • 50 > 49 >= 40 ; أكبر قيمة أساسية هي 40.
  • القسمة 49/40. حاصل القسمة = 1 الدقة = 'MMMDXL'
  • الباقي = 9.

التكرار 4

  • الرقم 9 موجود في القائمة الدقة = 'MMMDXL'
  • الباقي = 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)); 

الإخراج
MMMDXLIX

تعقيد الوقت: O(n) حيث n هو طول سلسلة الإجابة التي تخزن التحويل.
المساحة المساعدة: على)

[للنطاق المحدود] - O(n) الوقت وO(n) الفضاء

تعتمد الفكرة على حقيقة أن لدينا نطاقًا محدودًا لتغطية الأرقام من 0 إلى 3999. فنحن نعزل الأرقام المقابلة لأماكن الآلاف والمئات والعشرات والآحاد، ثم نقوم بتعيين كل رقم إلى ما يعادله من الأرقام الرومانية بناءً على قيمته الموضعية.

  • قم بتخزين تعيينات الحرف M لحواصل مختلفة 0 1 2 3
  • تعيينات المتجر لـ C L وI لحواصل مختلفة من 0 إلى 9.

باستخدام التعيينات المذكورة أعلاه نقوم مباشرة بإنشاء سلسلة النتائج.

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

الإخراج
MMMDXLIX