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

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

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

Sembol Değer
BEN 1
IV 4
V 5
IX 9
X 10
XL 40
L 50
XC 90
C 100
CD 400
D 500
SANTİMETRE 900
M 1000

Ö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.

  • I = 1 X = 10
  • IX 10 - 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
  • XL 50 - 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

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

[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