logo

המרת מספר עשרוני שוכב בין 1 ל- 3999 לספרות רומיות

נסה את זה בתרגול GFG ' title=

בהינתן מספר שלם להמיר אותו לייצוג המספר הרומי המקביל שלו.

פֶּתֶק: להלן רשימת הסמלים הרומאים (כולל מקרים חיסור):



סֵמֶלעֵרֶך
אֲנִי1
Iv4
V5
Ix9
X10
XL40
L.50
Xc90
ג100
CD400
ד500
ס"מ900
מ '1000

דוגמאות: 

קֶלֶט: 9
תְפוּקָה: Ix
הֶסבֵּר: 9 כתוב כ'- IX 'בספרות רומיות באמצעות סימון מחסור - הצבת ספרות קטנה יותר לפני אחת גדולה יותר.

מבנים באמצעות מערכים ב-c
  • I= 1X= 10
  • IXפירושו 10 - 1 = 9

קֶלֶט: 40
תְפוּקָה: XL
הֶסבֵּר: 40 נכתב כ- 'XL' בספרות רומיות באמצעות סימון חיסור - הצבת מספר קטן יותר לפני מספר גדול יותר.



בינה מלאכותית וסוכנים אינטליגנטיים
  • X= 10 L = 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. Quotient = 3 res = 'mmm' (הערה m שייך ל 1000)
  • השאר = 549

איטרציה 2

  • 1000> 549> = 500; ערך הבסיס הגדול ביותר יהיה 500.
  • לחלק 549/500. בכל פעם = 1. res = '300'
  • השאר = 49

איטרציה 3

  • 50> 49> = 40; ערך הבסיס הגדול ביותר הוא 40.
  • לחלק 49/40. Quotient = 1 Res = '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 הוא אורך מחרוזת התשובה המאחסנת את ההמרה.
שטח עזר: עַל)

java לקרוא csv

[לטווח מוגבל] - O (n) זמן ו- O (n) שטח

הרעיון מבוסס על העובדה שיש לנו טווח מוגבל לסמוי 0 עד 3999. אנו מבודדים את הספרות המתאימות לאלפי מאות עשרות ואלה מקומות ואז ממפים כל ספרה למקבילה הספרית הרומית שלו בהתבסס על ערכו המיקומי.

  • אחסן מיפוי של אופי M עבור Quaseces 0 1 2 3 3
  • אחסן מיפויים של C L ואני עבור כמות שונות מהצורה 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