fork(2) download
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. void number (long long n) {
  6. if(abs(n) < 1000){// сотни, десятки, единицы
  7. if(n < 0) {
  8. cout << "minus ";
  9. n = abs(n);
  10. number(n);
  11. }
  12. else if(n == 0) cout << "zero";
  13. else {// натуральные числа
  14. int safe = n;// сохраняем значение числа, так как дальше его изменяем,
  15. if((n / 100) != 0) {// если есть сотни
  16. n = n / 100;
  17. }
  18. switch(n){
  19. case 1: cout << "one "; break;
  20. case 2: cout << "two "; break;
  21. case 3: cout << "three "; break;
  22. case 4: cout << "four "; break;
  23. case 5: cout << "five "; break;
  24. case 6: cout << "six "; break;
  25. case 7: cout << "seven "; break;
  26. case 8: cout << "eight "; break;
  27. case 9: cout << "nine "; break;
  28. }
  29. if(((safe / 100) == 0) && ((safe % 100) / 10 == 0)){
  30. n = -1e90;// чтобы не продолжать выводить нули
  31. }
  32. if((safe / 100) > 0) {
  33. cout << "hundred ";
  34. n = safe % 100;
  35. safe = 0;
  36. if(n > 0){
  37. cout << "and ";
  38. }
  39. }
  40. if((n / 10) == 0){
  41. number(n);
  42. } else if((n / 10) == 1) {
  43. switch(n) {
  44. case 10: cout << "ten "; break;
  45. case 11: cout << "eleven "; break;
  46. case 12: cout << "twelve "; break;
  47. case 13: cout << "thirteen "; break;
  48. case 14: cout << "fourteen "; break;
  49. case 15: cout << "fifteen "; break;
  50. case 16: cout << "sixteen "; break;
  51. case 17: cout << "seventeen "; break;
  52. case 18: cout << "eighteen "; break;
  53. case 19: cout << "nineteen "; break;
  54. }
  55. } else if((n / 10) > 1) {
  56. switch(n / 10) {
  57. case 2: cout << "twenty"; break;
  58. case 3: cout << "thirty"; break;
  59. case 4: cout << "forty"; break;
  60. case 5: cout << "fifty"; break;
  61. case 6: cout << "sixty"; break;
  62. case 7: cout << "seventy"; break;
  63. case 8: cout << "eighty"; break;
  64. case 9: cout << "ninety"; break;
  65. }
  66. n = n % 10;
  67. if(n != 0){
  68. cout << "-";
  69. number(n);
  70. }
  71. }
  72. }
  73. } else {// выводим тысячи, миллионы, миллиарды и т.д.
  74. if(n >= 1e15) {
  75. number(n / 1e15);
  76. cout << "billiard ";
  77. n %= (long long) 1e15;
  78. if(n != 0) number(n);
  79. } else if(n >= 1e12) {
  80. number(n / 1e12);
  81. cout << "billion ";
  82. n %= (long long) 1e12;
  83. if(n != 0) number(n);
  84. } else if(n >= 1e9) {
  85. number(n / 1e9);
  86. cout << "milliard ";
  87. n %= (int) 1e9;
  88. if(n != 0) number(n);
  89. } else if(n >= 1e6) {
  90. number(n / 1e6);
  91. cout << "million ";
  92. n %= (int) 1e6;
  93. if(n != 0) number(n);
  94. } else if(n >= 1e3) {
  95. number(n / 1e3);
  96. cout << "thousand ";
  97. n %= (int) 1e3;
  98. if(n != 0) number(n);// чтоб не выводить ноль после тысяч
  99. }
  100. }
  101. }
  102.  
  103.  
  104.  
  105. int main() {
  106. long long n;
  107. cin >> n;
  108. number(n);
  109. return 0;
  110. }
Success #stdin #stdout 0s 3420KB
stdin
999000000000000000
stdout
nine hundred and ninety-nine billiard