fork(2) download
  1. <?php
  2.  
  3.  
  4. $end = array(
  5. 0 => array(
  6. 0 => "миллион",
  7. 1 => "миллиона",
  8. 2 => "миллионов"
  9. ),
  10. 1 => array(
  11. 0 => "тысяча",
  12. 1 => "тысячи",
  13. 2 => "тысяч"
  14. ),
  15. 2 => array(
  16. 0 => "рубль",
  17. 1 => "рубля",
  18. 2 => "рублей"
  19. )
  20. );
  21.  
  22. /* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
  23. function inclineWord($declension, $latterFigure, $end) {
  24.  
  25. if ($latterFigure == 1){
  26. $word = $end[$declension][0];
  27. } elseif (($latterFigure >= 2) && ($latterFigure <= 4)) {
  28. $word = $end[$declension][1];
  29. } else {
  30. $word = $end[$declension][2];
  31. }
  32.  
  33. return($word);
  34. }
  35.  
  36. function writeThousand($declension, $discharge, $text, $spelling) {
  37.  
  38. if (($discharge == 1) && ($declension == 1)) {
  39. $text = $text.' одна';
  40. return($text);
  41. break;
  42. } elseif (($discharge == 2) && ($declension == 1)) {
  43. $text = $text.' две';
  44. return($text);
  45. break;
  46. } else {
  47. $text = $text.' '.$spelling[$discharge];
  48. return($text);
  49. break;
  50. }
  51. }
  52.  
  53. //разбивает число на миллионы, тысяча и сотни
  54. function splitToParts($number) {
  55.  
  56. $hundred = $number % 1000;
  57.  
  58.  
  59. $thousand = $number % 1000000 * 0.001;
  60. $thousand = floor($thousand);
  61.  
  62. $million = $number % 1000000000 * 0.000001;
  63. $million = floor ($million);
  64.  
  65. $level = array(
  66. 0 => $million,
  67. 1 => $thousand,
  68. 2 => $hundred
  69. );
  70.  
  71. return($level);
  72. }
  73.  
  74. //переводит числовое число в текстовое
  75. function smallNumberToText($number, $end) {
  76.  
  77. $spelling = array(
  78. 0 => 'ноль',
  79. 1 => 'один',
  80. 2 => 'два',
  81. 3 => 'три',
  82. 4 => 'четыре',
  83. 5 => 'пять',
  84. 6 => 'шесть',
  85. 7 => 'семь',
  86. 8 => 'восемь',
  87. 9 => 'девять',
  88. 10 => 'десять',
  89. 11 => 'одиннадцать',
  90. 12 => 'двенадцать',
  91. 13 => 'тринадцать',
  92. 14 => 'четырнадцать',
  93. 15 => 'пятнадцать',
  94. 16 => 'шестнадцать',
  95. 17 => 'семнадцать',
  96. 18 => 'восемнадцать',
  97. 19 => 'девятнадцать',
  98. 20 => 'двадцать',
  99. 30 => 'тридцать',
  100. 40 => 'сорок',
  101. 50 => 'пятьдесят',
  102. 60 => 'шестьдесят',
  103. 70 => 'семьдесят',
  104. 80 => 'восемьдесят',
  105. 90 => 'девяносто',
  106. 100 => 'сто',
  107. 200 => 'двести',
  108. 300 => 'триста',
  109. 400 => 'четыреста',
  110. 500 => 'пятьсот',
  111. 600 => 'шестьсот',
  112. 700 => 'семьсот',
  113. 800 => 'восемьсот',
  114. 900 => 'девятьсот',
  115. );
  116.  
  117. $level = splitToParts($number);
  118.  
  119. $text = "";
  120.  
  121. foreach($level as $declension => $discharge) {
  122.  
  123. if (($discharge % 100 >= 10) && ($discharge % 100 <= 19)) {
  124. $latterFigure = $discharge % 100;
  125. } else {
  126. $latterFigure = $discharge % 10;
  127. }
  128.  
  129. if ($discharge != 0) {
  130. $aboveZero = true;
  131. }
  132.  
  133. if (($discharge >= 100) && ($discharge <= 999)) {
  134. $numberInArray = floor($discharge * 0.01) * 100;
  135. $text = $text.' '.$spelling[$numberInArray];
  136. $discharge = $discharge % 100;
  137. }
  138.  
  139. if ($discharge <= 9 || $discharge % 10 == 0) {
  140. $i = 1;
  141. } else {
  142. $i = 2;
  143. }
  144.  
  145. if (($discharge >= 10) && ($discharge <= 19)) {
  146.  
  147. $numberInArray = $discharge;
  148. $text = $text.' '.$spelling[$numberInArray];
  149.  
  150. } elseif ($discharge != 0) {
  151.  
  152. switch ($i) {
  153. case 1:
  154. $text = writeThousand($declension, $discharge, $text, $spelling);
  155. break;
  156. case 2:
  157. $numberInArray = floor($discharge / 10) * 10;
  158. $text = $text.' '.$spelling[$numberInArray];
  159. $discharge = $discharge % 10;
  160. $text = writeThousand($declension, $discharge, $text, $spelling);
  161. break;
  162. }
  163. }
  164.  
  165. if ($aboveZero == true) {
  166. $word = inclineWord($declension, $latterFigure, $end);
  167. $text = $text.' '.$word;
  168. $aboveZero = false;
  169. }
  170. }
  171.  
  172.  
  173. if ($number == 0) {
  174. $text = " ноль рублей";
  175. } elseif ($number % 1000 == 0) {
  176. $text = $text.' '.'рублей';
  177. }
  178. return($text);
  179. }
  180.  
  181. $number = mt_rand(0, 999999999);
  182. $number = smallNumberToText($number, $end);
  183. echo "На вашем счету{$number}\n";
Success #stdin #stdout 0.02s 52472KB
stdin
Standard input is empty
stdout
524911110
На вашем счету пятьсот двадцать четыре миллиона девятьсот одиннадцать тысяч сто десять рублей