fork(4) download
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. string zamienNaSlowo(int liczba)
  9. {
  10. static const map <int, string> zapisSlowny {
  11. { 1, "jeden" },
  12. { 2, "dwa" },
  13. { 3, "trzy" },
  14. { 4, "cztery" },
  15. { 5, "piec" },
  16. { 6, "szesc" },
  17. { 7, "siedem" },
  18. { 8, "osiem" },
  19. { 9, "dziewiec" },
  20. { 10, "dziesiec" },
  21. { 11, "jedenascie" },
  22. { 12, "dwanascie" },
  23. { 13, "trzynascie" },
  24. { 14, "czternascie" },
  25. { 15, "pietnascie" },
  26. { 16, "szesnascie" },
  27. { 17, "siedemnascie" },
  28. { 18, "osiemnascie" },
  29. { 19, "dziewietnascie" },
  30. { 20, "dwadziescia" },
  31. { 30, "trzydziesci" },
  32. { 40, "czterdziesci" },
  33. { 50, "piecdziesiat" },
  34. { 60, "szescdziesiat" },
  35. { 70, "siedemdziesiat" },
  36. { 80, "osiemdziesiat" },
  37. { 90, "dziewiecdziesiat" },
  38. { 100, "sto" },
  39. { 200, "dwiescie" },
  40. { 300, "trzysta" },
  41. { 400, "czterysta" },
  42. { 500, "piecset" },
  43. { 600, "szescset" },
  44. { 700, "siedemset" },
  45. { 800, "osiemset" },
  46. { 900, "dziewiecset" },
  47. };
  48.  
  49. string slowo;
  50. auto it = zapisSlowny.find(liczba);
  51.  
  52. if (it != zapisSlowny.end())
  53. {
  54. slowo = it->second;
  55. }
  56. return slowo;
  57. }
  58.  
  59. void zamienLiczbeTrzycyfrowaNaSlowo(int liczbaTrzycyfrowa)
  60. {
  61. int tymczasowa1, tymczasowa2 = 0;
  62. tymczasowa1 = liczbaTrzycyfrowa % 100;
  63. tymczasowa2 = liczbaTrzycyfrowa % 10;
  64. liczbaTrzycyfrowa = liczbaTrzycyfrowa - tymczasowa1;
  65.  
  66. if (zamienNaSlowo(liczbaTrzycyfrowa) != " ")
  67. cout << zamienNaSlowo(liczbaTrzycyfrowa) << " ";
  68.  
  69. if (tymczasowa1 < 20)
  70. cout << zamienNaSlowo(tymczasowa1);
  71. else
  72. {
  73. tymczasowa2 = tymczasowa1 % 10;
  74. tymczasowa1 = tymczasowa1 - tymczasowa2;
  75.  
  76. if (zamienNaSlowo(tymczasowa1) != " ")
  77. cout << zamienNaSlowo(tymczasowa1) << " ";
  78.  
  79. cout << zamienNaSlowo(tymczasowa2);
  80. }
  81. }
  82.  
  83. vector <string> podzielStringNaCiagiTrzycyfrowe (string &liczba)
  84. {
  85. const int dlugoscPodciagu = 3;
  86. int dlugoscLiczby = liczba.length();
  87. int liczbaPodciagow = dlugoscLiczby / dlugoscPodciagu;
  88.  
  89. vector <string> wektorCiagowTrzycyfrowych;
  90.  
  91. for (int i=liczbaPodciagow-1; i>=0; i--)
  92. {
  93. wektorCiagowTrzycyfrowych.push_back(liczba.substr(i*dlugoscPodciagu + dlugoscLiczby%dlugoscPodciagu, dlugoscPodciagu));
  94. }
  95.  
  96. if (dlugoscLiczby % dlugoscPodciagu != 0)
  97. wektorCiagowTrzycyfrowych.push_back(liczba.substr(0,dlugoscLiczby%dlugoscPodciagu));
  98.  
  99. return wektorCiagowTrzycyfrowych;
  100. }
  101.  
  102. vector <int> zamienCiagiZnakowNaLiczby (vector<string> &wektorCiagowTrzycyfrowych)
  103. {
  104. vector <int> wektorLiczbTrzycyfrowych;
  105. int dlugoscWektora = wektorCiagowTrzycyfrowych.size();
  106.  
  107. for (int i=0; i<dlugoscWektora; i++)
  108. wektorLiczbTrzycyfrowych.push_back(stoi(wektorCiagowTrzycyfrowych [i]));
  109.  
  110. return wektorLiczbTrzycyfrowych;
  111. }
  112.  
  113. void zamienWektorNaZapisSlowny (vector <int> &wektorLiczbTrzycyfrowych)
  114. {
  115. int dlugoscWektora = wektorLiczbTrzycyfrowych.size();
  116. string rzadWielkosci [5] = {" ","tys. ","mln. ","mld. ","bln. "};
  117.  
  118. for (int i=dlugoscWektora-1; i>=0; i--)
  119. {
  120. zamienLiczbeTrzycyfrowaNaSlowo (wektorLiczbTrzycyfrowych[i]);
  121. cout << " " << rzadWielkosci [i];
  122. }
  123. cout << endl;
  124. }
  125.  
  126. int main()
  127. {
  128. int liczbaTestow;
  129. string liczba;
  130.  
  131. cin >> liczbaTestow;
  132.  
  133. for (int i=0; i<liczbaTestow; i++)
  134. {
  135. cin >> liczba;
  136.  
  137. vector <string> wektorCiagowTrzycyfrowych = podzielStringNaCiagiTrzycyfrowe(liczba);
  138. vector <int> wektorLiczbTrzycyfrowych = zamienCiagiZnakowNaLiczby(wektorCiagowTrzycyfrowych);
  139. zamienWektorNaZapisSlowny (wektorLiczbTrzycyfrowych);
  140. }
  141. return 0;
  142. }
  143.  
Success #stdin #stdout 0s 4304KB
stdin
6
1
12
345
1459
123456789
12120012
stdout
 jeden  
 dwanascie  
trzysta czterdziesci piec  
 jeden tys. czterysta piecdziesiat dziewiec  
sto dwadziescia trzy mln. czterysta piecdziesiat szesc tys. siedemset osiemdziesiat dziewiec  
 dwanascie mln. sto dwadziescia  tys.  dwanascie