fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <sstream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. void dwojki(string number)
  9. {
  10. map<string, string> numberToWord;
  11. numberToWord["1"] = "jeden";
  12. numberToWord["2"] = "dwa";
  13. numberToWord["3"] = "trzy";
  14. numberToWord["4"] = "cztery";
  15. numberToWord["5"] = "piec";
  16. numberToWord["6"] = "szesc";
  17. numberToWord["7"] = "siedem";
  18. numberToWord["8"] = "osiem";
  19. numberToWord["9"] = "dziewiec";
  20. numberToWord["10"] = "dziesiec";
  21. numberToWord["11"] = "jedenascie";
  22. numberToWord["12"] = "dwanascie";
  23. numberToWord["13"] = "trzynascie";
  24. numberToWord["14"] = "czternascie";
  25. numberToWord["15"] = "pietnascie";
  26. numberToWord["16"] = "szesnascie";
  27. numberToWord["17"] = "siedemnascie";
  28. numberToWord["18"] = "osiemnascie";
  29. numberToWord["19"] = "dziewietnascie";
  30. map<char, string> digitToWord;
  31. digitToWord['0'] = "";
  32. digitToWord['1'] = "jeden";
  33. digitToWord['2'] = "dwa";
  34. digitToWord['3'] = "trzy";
  35. digitToWord['4'] = "cztery";
  36. digitToWord['5'] = "piec";
  37. digitToWord['6'] = "szesc";
  38. digitToWord['7'] = "siedem";
  39. digitToWord['8'] = "osiem";
  40. digitToWord['9'] = "dziewiec";
  41. map<string, string>::iterator itr = numberToWord.find(number);
  42. map<char, string>::iterator itr2 = digitToWord.find(number[ number.length() - 1 ]);
  43. if (itr -> first == number)
  44. cout << itr -> second;
  45. if (number.length() == 2)
  46. {
  47. if (number[0] == '0')
  48. cout << itr2 -> second;
  49. if (number[0] == '2')
  50. cout << "dwadziescia";
  51. if (number[0] == '3')
  52. cout << "trzydziesci";
  53. if (number[0] == '4')
  54. cout << "czterdziesci";
  55. if (number[0] == '5')
  56. cout << "piecdziesiat";
  57. if (number[0] == '6')
  58. cout << "szescdziesiat";
  59. if (number[0] == '7')
  60. cout << "siedemdziesiat";
  61. if (number[0] == '8')
  62. cout << "osiemdziesiat";
  63. if (number[0] == '9')
  64. cout << "dziewiecdziesiat";
  65. if (number[1] >= '1' && number[1] <= '9' && number[ number.length() - 2 ] != '0' && number[ number.length() - 2 ] != '1')
  66. {
  67. cout << " " << itr2 -> second;
  68. }
  69. }
  70. }
  71.  
  72. void trojki(string number)
  73. {
  74. string numberWithoutFirstDigit = number.substr(1,2);
  75. if (number[ number.length() - 3 ] == '1')
  76. cout << "sto";
  77. if (number[ number.length() - 3 ] == '2')
  78. cout << "dwiescie";
  79. if (number[ number.length() - 3 ] == '3')
  80. cout << "trzysta";
  81. if (number[ number.length() - 3 ] == '4')
  82. cout << "czterysta";
  83. if (number[ number.length() - 3 ] == '5')
  84. cout << "piecset";
  85. if (number[ number.length() - 3 ] == '6')
  86. cout << "szescset";
  87. if (number[ number.length() - 3 ] == '7')
  88. cout << "siedemset";
  89. if (number[ number.length() - 3 ] == '8')
  90. cout << "osiemset";
  91. if (number[ number.length() - 3 ] == '9')
  92. cout << "dziewiecset";
  93. if (number[1] >= '0' && number[1] <= '9' && number[0]!= '0' && (number[1] != '0' || number[2] != '0'))
  94. {
  95. cout << " ";
  96. }
  97. dwojki(numberWithoutFirstDigit);
  98. }
  99. int main()
  100. {
  101. string number;
  102. int tests;
  103. string koncowki[6] = {"","","tys.","mln.","mld.","bln."};
  104. cin >> tests;
  105. for(int i = 1; i <= tests; i++)
  106. {
  107. cin >> number;
  108. if (number.length() > 3)
  109. {
  110. vector<string> splitedNumbers;
  111. for(int i = number.length(); i > 0; i -= 3)
  112. {
  113. number.insert(i," ");
  114. }
  115.  
  116. istringstream splitingNumber(number);
  117. string numberLessOrEqualToThree;
  118. while (getline(splitingNumber, numberLessOrEqualToThree, ' '))
  119. {
  120. splitedNumbers.push_back(numberLessOrEqualToThree);
  121. }
  122. for(int j = 0; j<splitedNumbers.size();j++)
  123. {
  124. if (splitedNumbers[j].length() == 3)
  125. {
  126. trojki(splitedNumbers[j]);
  127. }
  128. if (splitedNumbers[j].length() <= 2)
  129. {
  130. dwojki(splitedNumbers[j]);
  131. }
  132. if (splitedNumbers[j] != "000" && splitedNumbers[j] != "00" && splitedNumbers[j] != "0")
  133. cout << " " << koncowki[splitedNumbers.size()-j] << " ";
  134. }
  135. }
  136. if (number.length() <= 2)
  137. {
  138. dwojki(number);
  139. }
  140. if (number.length() == 3)
  141. {
  142. trojki(number);
  143. }
  144. cout << endl;
  145. }
  146. return 0;
  147. }
  148.  
Success #stdin #stdout 0s 15256KB
stdin
1
1000001
stdout
jeden mln. jeden