fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4.  
  5. std::string numberToString(int value, const std::string& dictionary)
  6. {
  7. int len = dictionary.length();
  8. if(len < 2)
  9. return "bad dictionary";
  10.  
  11. std::string result = "";
  12. unsigned int _value = value;
  13.  
  14. do
  15. {
  16. result += dictionary[_value % len];
  17. _value /= len;
  18. }while(_value > 0);
  19.  
  20. return result;
  21. }
  22.  
  23. int stringToNumber(const std::string& value, const std::map<char, int>& dec_dictionary)
  24. {
  25. unsigned int result = 0;
  26. int len = dec_dictionary.size();
  27. int vlen = value.length();
  28. if(len > 1)
  29. {
  30. for(unsigned int n = vlen; n--;)
  31. {
  32. result *= len;
  33. result += dec_dictionary.find(value[n])->second;
  34. }
  35. }
  36.  
  37. return result;
  38. }
  39.  
  40. int main()
  41. {
  42. std::string dictionary;
  43. std::map<char, int> dec_dictionary;
  44. for(char ch = 'A'; ch <= 'Z'; ++ch)
  45. dictionary += ch;
  46. for(char ch = 'a'; ch <= 'z'; ++ch)
  47. dictionary += ch;
  48.  
  49. for(const auto& ch : dictionary)
  50. dec_dictionary[ch] = dec_dictionary.size();
  51.  
  52. std::cout << "Dictionary: " << dictionary.c_str() <<
  53. "\tdec_dictionary size: " << dec_dictionary.size() << std::endl;
  54.  
  55. int value01 = 4242;
  56. int value02 = -4242;
  57. int value03 = 0;
  58. auto string01 = numberToString(value01, dictionary);
  59. auto string02 = numberToString(value02, dictionary);
  60. auto string03 = numberToString(value03, dictionary);
  61. int decoded_value01 = stringToNumber(string01, dec_dictionary);
  62. int decoded_value02 = stringToNumber(string02, dec_dictionary);
  63. int decoded_value03 = stringToNumber(string03, dec_dictionary);
  64. std::cout <<
  65. "number: " << value01 <<
  66. "\tstring: " << string01.c_str() <<
  67. "\tdecoded_number: " << decoded_value01 << std::endl;
  68. std::cout <<
  69. "number: " << value02 <<
  70. "\tstring: " << string02.c_str() <<
  71. "\tdecoded_number: " << decoded_value02 << std::endl;
  72. std::cout <<
  73. "number: " << value03 <<
  74. "\tstring: " << string03.c_str() <<
  75. "\tdecoded_number: " << decoded_value03 << std::endl;
  76. return 0;
  77. }
Success #stdin #stdout 0s 4504KB
stdin
Standard input is empty
stdout
Dictionary: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz	dec_dictionary size: 52
number: 4242	string: edB	decoded_number: 4242
number: -4242	string: SvhVPL	decoded_number: -4242
number: 0	string: A	decoded_number: 0