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