fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. std::string dziewietnascie_i_nizej[] = { "zero", "jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec", "dziesiec",
  5. "jedenascie", "dwanascie", "trzynascie", "czternascie", "pietnascie", "szesnascie", "siedemnascie", "osiemnascie", "dziewietnascie" };
  6. std::string dziesiatki[] = { "dwadziescia", "trzydziesci", "czterdziesci", "piecdziesiat", "szescdziesiat", "siedemdziesiat", "osiemdziesiat", "dziewiecdziesiat" };
  7. std::string setki[] = { "sto", "dwiescie", "trzysta", "czterysta", "piecset", "szescset", "siedemset", "osiemset", "dziewiecset" };
  8. std::string iteracje[] = { "tys", "mln" };
  9.  
  10. std::string oblicz_bez_setek(int, int);
  11.  
  12. int main()
  13. {
  14. long long liczba = 0;
  15. std::cin >> liczba;
  16. int iteracja = 0;
  17.  
  18. std::string wynik = "";
  19. std::string temp = "";
  20. int liczba_setek = 0;
  21.  
  22. do {
  23. liczba_setek = liczba / 100;
  24. if(liczba_setek != 0) {
  25. liczba_setek %= 10;
  26. if(liczba_setek)
  27. temp += setki[liczba_setek - 1];
  28.  
  29. temp += oblicz_bez_setek(liczba, iteracja);
  30. } else {
  31. temp += oblicz_bez_setek(liczba, iteracja);
  32. }
  33. wynik.insert(0, temp);
  34. temp.clear();
  35. ++iteracja;
  36. liczba /= 1000;
  37. } while(liczba);
  38.  
  39. std::cout << wynik;
  40. return 0;
  41. }
  42.  
  43. std::string oblicz_bez_setek(int liczba, int iteracja)
  44. {
  45. int reszta_z_dzielenia_przez_dziesiec = 0,
  46. liczba_dziesiatek = 0,
  47. reszta_z_dzielenia_przez_sto = 0;
  48. std::string wynik = "";
  49.  
  50. reszta_z_dzielenia_przez_sto = liczba % 100;
  51.  
  52. if(reszta_z_dzielenia_przez_sto == 0) {
  53. // nie printujemy nic
  54. } else if(reszta_z_dzielenia_przez_sto < 20) {
  55. wynik += " " + dziewietnascie_i_nizej[reszta_z_dzielenia_przez_sto];
  56. } else {
  57. liczba_dziesiatek = reszta_z_dzielenia_przez_sto / 10;
  58. if(liczba_dziesiatek != 0) {
  59. wynik += " " + dziesiatki[liczba_dziesiatek - 2];
  60. reszta_z_dzielenia_przez_dziesiec = reszta_z_dzielenia_przez_sto % 10;
  61. if(reszta_z_dzielenia_przez_dziesiec != 0) {
  62. wynik += " " + dziewietnascie_i_nizej[reszta_z_dzielenia_przez_dziesiec];
  63. }
  64. }
  65. }
  66. switch(iteracja) {
  67. case 1:
  68. wynik += " " + iteracje[iteracja - 1] + " ";
  69. break;
  70. case 2:
  71. wynik += " " + iteracje[iteracja - 1] + " ";
  72. break;
  73. default:
  74. break;
  75. }
  76.  
  77. return wynik;
  78. }
  79.  
Success #stdin #stdout 0s 3484KB
stdin
912903754
stdout
dziewiecset dwanascie mln dziewiecset trzy tys siedemset piecdziesiat cztery