VegaS1234

[FUNCTION]Convert Int to a Roman Number String

Oct 15th, 2017
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <string>
  2. std::string IntToRomanStr(unsigned short value)
  3. {
  4.     if (value < 1)
  5.         return "0";
  6.  
  7.     if (value > 5000)
  8.         return "";
  9.  
  10.     struct SIntToRomanStr
  11.     {
  12.         unsigned short value;
  13.         std::string strRoman;
  14.     };
  15.  
  16.     static SIntToRomanStr const digits_subs[] =
  17.     {
  18.         1000, "M", 900, "CM", 500, "D", 400, "CD", 100, "C", 90, "XC", 50, "L", 40, "XL", 10, "X", 9, "IX", 5, "V", 4, "IV", 1, "I"
  19.     };
  20.  
  21.     std::string substr;
  22.     for (SIntToRomanStr const* type_identifier = digits_subs; type_identifier->value > 0; ++type_identifier)
  23.     {
  24.         for (; value >= type_identifier->value;)
  25.         {
  26.             substr += type_identifier->strRoman;
  27.             value -= type_identifier->value;
  28.         }
  29.     }
  30.  
  31.     return substr.c_str();
  32. }
  33.  
  34. //@Lua - Darisil
  35. IntToRomanStr = function(int)
  36.     local real_int = tonumber(int);
  37.     if (real_int < 1) then
  38.         return "0";
  39.     elseif (real_int > 5000) then
  40.         return "";
  41.     end -- if/elseif
  42.     local str = "";
  43.     local array = {
  44.         [1] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
  45.         [10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
  46.         [100] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
  47.         [1000] = {"", "M", "MM", "MMM", "MMMM", "MMMMM"}
  48.     };
  49.     for x = 3, 0, -1 do
  50.         local index = math.pow(10, x);
  51.         local subindex = math.floor(real_int / index);
  52.         str = string.format("%s%s", str, array[index][subindex+1]);
  53.         real_int = real_int - subindex * index;
  54.     end -- for
  55.     return str;
  56. end -- function
Advertisement
Add Comment
Please, Sign In to add comment