fork download
  1. <?php
  2.  
  3. function smallNumbers($number, $isFemale) {
  4. $spelling = array(
  5. 0 => 'ноль ', 10 => 'десять ', 100 => 'сто ',
  6. 1 => 'один ', 11 => 'одиннадцать ', 20 => 'двадцать ', 200 => 'двести ',
  7. 2 => 'два ', 12 => 'двенадцать ', 30 => 'тридцать ', 300 => 'триста ',
  8. 3 => 'три ', 13 => 'тринадцать ', 40 => 'сорок ', 400 => 'четыреста ',
  9. 4 => 'четыре ', 14 => 'четырнадцать ', 50 => 'пятьдесят ', 500 => 'пятьсот ',
  10. 5 => 'пять ', 15 => 'пятнадцать ', 60 => 'шестьдесят ', 600 => 'шестьсот ',
  11. 6 => 'шесть ', 16 => 'шестнадцать ', 70 => 'семьдесят ', 700 => 'семьсот ',
  12. 7 => 'семь ', 17 => 'семнадцать ', 80 => 'восемьдесят ', 800 => 'восемьсот ',
  13. 8 => 'восемь ', 18 => 'восемнадцать ', 90 => 'девяносто ', 900 => 'девятьсот ',
  14. 9 => 'девять ', 19 => 'девятнадцать '
  15. );
  16.  
  17. $femaleSpelling = array(
  18. 1 => 'одна ', 2 => 'две '
  19. );
  20.  
  21. $result = '';
  22. $hundreds = 0; $tens = 0; $ones = 0;
  23.  
  24. $hundreds = (floor($number/100))*100;
  25. if ($hundreds >= 100) {
  26. $result .= $spelling[$hundreds];
  27. }
  28.  
  29. $remains = $number - $hundreds;
  30.  
  31. if ($remains >= 20) {
  32. $tens = (floor($remains/10))*10;
  33. $result .= $spelling[$tens];
  34.  
  35. $ones = $remains - $tens;
  36. if (($ones < 3) & ($ones > 0) & ($isFemale == true)) {
  37. $result .= $femaleSpelling[$ones];
  38. } elseif ($ones > 0) {
  39. $result .= $spelling[$ones];
  40. }
  41. } elseif (($remains < 20) & ($remains > 0) & ($isFemale == false)) {
  42. $result .= $spelling[$remains];
  43. } elseif (($remains < 3) & ($remains > 0) & ($isFemale == true)) {
  44. $result .= $femaleSpelling[$remains];
  45. } elseif ($remains > 0) {
  46. $result .= $spelling[$remains];
  47. }
  48.  
  49. return $result;
  50. }
  51.  
  52. function typer($number) {
  53.  
  54. if ($number == 0) {
  55. $typeTotal = "ноль рублей";
  56. } else {
  57. $typeTotal = "";
  58. $millions = floor($number/1000000);
  59. $typeMillions = smallNumbers($millions, false);
  60.  
  61. $lastMillion = $millions % 10;
  62.  
  63. if ((($millions%100<=20) & ($millions%100>=5)) or (($lastMillion>=5) or (($lastMillion==0) and ($millions>0)))) {
  64. $typeMillions .= "миллионов ";
  65. } elseif ($lastMillion == 1) {
  66. $typeMillions .= "миллион ";
  67. } elseif (($lastMillion > 1) & ($lastMillion < 5)) {
  68. $typeMillions .= "миллиона ";
  69. }
  70.  
  71. $typeTotal .= $typeMillions;
  72.  
  73. $thousands = floor(($number - $millions*1000000)/1000);
  74. $typeThousands = smallNumbers($thousands, true);
  75. $lastThousand = $thousands % 10;
  76. if ((($thousands%100<=20) and ($thousands%100>=5)) or (($lastThousand>=5) or (($lastThousand==0) and ($thousands > 0)))) {
  77. $typeThousands .= "тысяч ";
  78. } elseif ($lastThousand == 1) {
  79. $typeThousands .= "тысяча ";
  80. } elseif (($lastThousand > 1) & ($lastThousand < 5)) {
  81. $typeThousands .= "тысячи ";
  82. }
  83.  
  84. $typeTotal .= $typeThousands;
  85.  
  86. $ones = $number % 1000;
  87. $typeOnes = smallNumbers($ones, false);
  88. $lastOne = $ones % 10;
  89. if ((($ones%100<=20) and ($ones%100>=5)) or (($lastOne>=5) or (($lastOne==0) and ($ones > 0)))) {
  90. $typeOnes .= "рублей";
  91. } elseif ($lastOne == 1) {
  92. $typeOnes .= "рубль";
  93. } elseif (($lastOne > 1) & ($lastOne < 5)) {
  94. $typeOnes .= "рубля";
  95. }
  96.  
  97. $typeTotal .= $typeOnes;
  98. }
  99. return $typeTotal;
  100. }
  101.  
  102. function tests($n, $k) {
  103. for ($i=0,$j=1; $i < $n; $i++, $j*=$k) {
  104.  
  105. $randomTestNumber = ceil(mt_rand(0, 999999999/$j));
  106. $typedTestNumber = typer($randomTestNumber);
  107.  
  108. echo "$randomTestNumber - $typedTestNumber\n";
  109. }
  110. }
  111.  
  112. tests(300, 1.07);
  113.  
Success #stdin #stdout 0.02s 20520KB
stdin
Standard input is empty
stdout
651487269 - шестьсот пятьдесят один миллион четыреста восемьдесят семь тысяч двести шестьдесят девять рублей
172433727 - сто семьдесят два миллиона четыреста тридцать три тысячи семьсот двадцать семь рублей
835073462 - восемьсот тридцать пять миллионов семьдесят три тысячи четыреста шестьдесят два рубля
460975396 - четыреста шестьдесят миллионов девятьсот семьдесят пять тысяч триста девяносто шесть рублей
356833472 - триста пятьдесят шесть миллионов восемьсот тридцать три тысячи четыреста семьдесят два рубля
443505242 - четыреста сорок три миллиона пятьсот пять тысяч двести сорок два рубля
122799682 - сто двадцать два миллиона семьсот девяносто девять тысяч шестьсот восемьдесят два рубля
552163962 - пятьсот пятьдесят два миллиона сто шестьдесят три тысячи девятьсот шестьдесят два рубля
24846307 - двадцать четыре миллиона восемьсот сорок шесть тысяч триста семь рублей
291933615 - двести девяносто один миллион девятьсот тридцать три тысячи шестьсот пятнадцать рублей
85413069 - восемьдесят пять миллионов четыреста тринадцать тысяч шестьдесят девять рублей
327325018 - триста двадцать семь миллионов триста двадцать пять тысяч восемнадцать рублей
287785037 - двести восемьдесят семь миллионов семьсот восемьдесят пять тысяч тридцать семь рублей
214493740 - двести четырнадцать миллионов четыреста девяносто три тысячи семьсот сорок рублей
104802943 - сто четыре миллиона восемьсот две тысячи девятьсот сорок три рубля
76198088 - семьдесят шесть миллионов сто девяносто восемь тысяч восемьдесят восемь рублей
111376171 - сто одиннадцать миллионов триста семьдесят шесть тысяч сто семьдесят один рубль
158571876 - сто пятьдесят восемь миллионов пятьсот семьдесят одна тысяча восемьсот семьдесят шесть рублей
57743365 - пятьдесят семь миллионов семьсот сорок три тысячи триста шестьдесят пять рублей
230396818 - двести тридцать миллионов триста девяносто шесть тысяч восемьсот восемнадцать рублей
53690208 - пятьдесят три миллиона шестьсот девяносто тысяч двести восемь рублей
209380780 - двести девять миллионов триста восемьдесят тысяч семьсот восемьдесят рублей
43711465 - сорок три миллиона семьсот одиннадцать тысяч четыреста шестьдесят пять рублей
43627829 - сорок три миллиона шестьсот двадцать семь тысяч восемьсот двадцать девять рублей
164306581 - сто шестьдесят четыре миллиона триста шесть тысяч пятьсот восемьдесят один рубль
117694410 - сто семнадцать миллионов шестьсот девяносто четыре тысячи четыреста десять рублей
25402657 - двадцать пять миллионов четыреста две тысячи шестьсот пятьдесят семь рублей
6305439 - шесть миллионов триста пять тысяч четыреста тридцать девять рублей
113198925 - сто тринадцать миллионов сто девяносто восемь тысяч девятьсот двадцать пять рублей
33688820 - тридцать три миллиона шестьсот восемьдесят восемь тысяч восемьсот двадцать рублей
66282663 - шестьдесят шесть миллионов двести восемьдесят две тысячи шестьсот шестьдесят три рубля
18291988 - восемнадцать миллионов двести девяносто одна тысяча девятьсот восемьдесят восемь рублей
96008231 - девяносто шесть миллионов восемь тысяч двести тридцать один рубль
93961946 - девяносто три миллиона девятьсот шестьдесят одна тысяча девятьсот сорок шесть рублей
34167132 - тридцать четыре миллиона сто шестьдесят семь тысяч сто тридцать два рубля
42907076 - сорок два миллиона девятьсот семь тысяч семьдесят шесть рублей
36072542 - тридцать шесть миллионов семьдесят две тысячи пятьсот сорок два рубля
52749092 - пятьдесят два миллиона семьсот сорок девять тысяч девяносто два рубля
59962836 - пятьдесят девять миллионов девятьсот шестьдесят две тысячи восемьсот тридцать шесть рублей
58370910 - пятьдесят восемь миллионов триста семьдесят тысяч девятьсот десять рублей
4267284 - четыре миллиона двести шестьдесят семь тысяч двести восемьдесят четыре рубля
51564940 - пятьдесят один миллион пятьсот шестьдесят четыре тысячи девятьсот сорок рублей
56709510 - пятьдесят шесть миллионов семьсот девять тысяч пятьсот десять рублей
25451562 - двадцать пять миллионов четыреста пятьдесят одна тысяча пятьсот шестьдесят два рубля
2920603 - два миллиона девятьсот двадцать тысяч шестьсот три рубля
33475329 - тридцать три миллиона четыреста семьдесят пять тысяч триста двадцать девять рублей
27103542 - двадцать семь миллионов сто три тысячи пятьсот сорок два рубля
19894354 - девятнадцать миллионов восемьсот девяносто четыре тысячи триста пятьдесят четыре рубля
17591564 - семнадцать миллионов пятьсот девяносто одна тысяча пятьсот шестьдесят четыре рубля
22700500 - двадцать два миллиона семьсот тысяч пятьсот рублей
13082519 - тринадцать миллионов восемьдесят две тысячи пятьсот девятнадцать рублей
7977737 - семь миллионов девятьсот семьдесят семь тысяч семьсот тридцать семь рублей
14752857 - четырнадцать миллионов семьсот пятьдесят две тысячи восемьсот пятьдесят семь рублей
25381617 - двадцать пять миллионов триста восемьдесят одна тысяча шестьсот семнадцать рублей
1439652 - один миллион четыреста тридцать девять тысяч шестьсот пятьдесят два рубля
3957782 - три миллиона девятьсот пятьдесят семь тысяч семьсот восемьдесят два рубля
13642164 - тринадцать миллионов шестьсот сорок две тысячи сто шестьдесят четыре рубля
1889661 - один миллион восемьсот восемьдесят девять тысяч шестьсот шестьдесят один рубль
1151969 - один миллион сто пятьдесят одна тысяча девятьсот шестьдесят девять рублей
16533543 - шестнадцать миллионов пятьсот тридцать три тысячи пятьсот сорок три рубля
5628058 - пять миллионов шестьсот двадцать восемь тысяч пятьдесят восемь рублей
9381104 - девять миллионов триста восемьдесят одна тысяча сто четыре рубля
4738698 - четыре миллиона семьсот тридцать восемь тысяч шестьсот девяносто восемь рублей
10058065 - десять миллионов пятьдесят восемь тысяч шестьдесят пять рублей
9741458 - девять миллионов семьсот сорок одна тысяча четыреста пятьдесят восемь рублей
8369331 - восемь миллионов триста шестьдесят девять тысяч триста тридцать один рубль
5669875 - пять миллионов шестьсот шестьдесят девять тысяч восемьсот семьдесят пять рублей
5860912 - пять миллионов восемьсот шестьдесят тысяч девятьсот двенадцать рублей
7617221 - семь миллионов шестьсот семнадцать тысяч двести двадцать один рубль
2288271 - два миллиона двести восемьдесят восемь тысяч двести семьдесят один рубль
2578193 - два миллиона пятьсот семьдесят восемь тысяч сто девяносто три рубля
5793226 - пять миллионов семьсот девяносто три тысячи двести двадцать шесть рублей
6941660 - шесть миллионов девятьсот сорок одна тысяча шестьсот шестьдесят рублей
3671625 - три миллиона шестьсот семьдесят одна тысяча шестьсот двадцать пять рублей
5357137 - пять миллионов триста пятьдесят семь тысяч сто тридцать семь рублей
4058869 - четыре миллиона пятьдесят восемь тысяч восемьсот шестьдесят девять рублей
5101412 - пять миллионов сто одна тысяча четыреста двенадцать рублей
3552257 - три миллиона пятьсот пятьдесят две тысячи двести пятьдесят семь рублей
2978997 - два миллиона девятьсот семьдесят восемь тысяч девятьсот девяносто семь рублей
3943539 - три миллиона девятьсот сорок три тысячи пятьсот тридцать девять рублей
2715951 - два миллиона семьсот пятнадцать тысяч девятьсот пятьдесят один рубль
3864611 - три миллиона восемьсот шестьдесят четыре тысячи шестьсот одиннадцать рублей
1163887 - один миллион сто шестьдесят три тысячи восемьсот восемьдесят семь рублей
1098364 - один миллион девяносто восемь тысяч триста шестьдесят четыре рубля
1756897 - один миллион семьсот пятьдесят шесть тысяч восемьсот девяносто семь рублей
262813 - двести шестьдесят две тысячи восемьсот тринадцать рублей
439139 - четыреста тридцать девять тысяч сто тридцать девять рублей
735575 - семьсот тридцать пять тысяч пятьсот семьдесят пять рублей
61043 - шестьдесят одна тысяча сорок три рубля
1704631 - один миллион семьсот четыре тысячи шестьсот тридцать один рубль
1290951 - один миллион двести девяносто тысяч девятьсот пятьдесят один рубль
1913557 - один миллион девятьсот тринадцать тысяч пятьсот пятьдесят семь рублей
1977138 - один миллион девятьсот семьдесят семь тысяч сто тридцать восемь рублей
1155563 - один миллион сто пятьдесят пять тысяч пятьсот шестьдесят три рубля
1202733 - один миллион двести две тысячи семьсот тридцать три рубля
992016 - девятьсот девяносто две тысячи шестнадцать рублей
735918 - семьсот тридцать пять тысяч девятьсот восемнадцать рублей
278329 - двести семьдесят восемь тысяч триста двадцать девять рублей
1065814 - один миллион шестьдесят пять тысяч восемьсот четырнадцать рублей
727205 - семьсот двадцать семь тысяч двести пять рублей
661723 - шестьсот шестьдесят одна тысяча семьсот двадцать три рубля
455052 - четыреста пятьдесят пять тысяч пятьдесят два рубля
985301 - девятьсот восемьдесят пять тысяч триста один рубль
656471 - шестьсот пятьдесят шесть тысяч четыреста семьдесят один рубль
92236 - девяносто две тысячи двести тридцать шесть рублей
77874 - семьдесят семь тысяч восемьсот семьдесят четыре рубля
191045 - сто девяносто одна тысяча сорок пять рублей
91259 - девяносто одна тысяча двести пятьдесят девять рублей
360358 - триста шестьдесят тысяч триста пятьдесят восемь рублей
528642 - пятьсот двадцать восемь тысяч шестьсот сорок два рубля
478057 - четыреста семьдесят восемь тысяч пятьдесят семь рублей
178038 - сто семьдесят восемь тысяч тридцать восемь рублей
412700 - четыреста двенадцать тысяч семьсот рублей
389220 - триста восемьдесят девять тысяч двести двадцать рублей
293053 - двести девяносто три тысячи пятьдесят три рубля
257136 - двести пятьдесят семь тысяч сто тридцать шесть рублей
161119 - сто шестьдесят одна тысяча сто девятнадцать рублей
360826 - триста шестьдесят тысяч восемьсот двадцать шесть рублей
27372 - двадцать семь тысяч триста семьдесят два рубля
270582 - двести семьдесят тысяч пятьсот восемьдесят два рубля
134063 - сто тридцать четыре тысячи шестьдесят три рубля
139733 - сто тридцать девять тысяч семьсот тридцать три рубля
175728 - сто семьдесят пять тысяч семьсот двадцать восемь рублей
44485 - сорок четыре тысячи четыреста восемьдесят пять рублей
215502 - двести пятнадцать тысяч пятьсот два рубля
10887 - десять тысяч восемьсот восемьдесят семь рублей
90830 - девяносто тысяч восемьсот тридцать рублей
14565 - четырнадцать тысяч пятьсот шестьдесят пять рублей
168819 - сто шестьдесят восемь тысяч восемьсот девятнадцать рублей
159623 - сто пятьдесят девять тысяч шестьсот двадцать три рубля
138291 - сто тридцать восемь тысяч двести девяносто один рубль
4795 - четыре тысячи семьсот девяносто пять рублей
23503 - двадцать три тысячи пятьсот три рубля
49376 - сорок девять тысяч триста семьдесят шесть рублей
32876 - тридцать две тысячи восемьсот семьдесят шесть рублей
65908 - шестьдесят пять тысяч девятьсот восемь рублей
87474 - восемьдесят семь тысяч четыреста семьдесят четыре рубля
14339 - четырнадцать тысяч триста тридцать девять рублей
83882 - восемьдесят три тысячи восемьсот восемьдесят два рубля
20521 - двадцать тысяч пятьсот двадцать один рубль
76925 - семьдесят шесть тысяч девятьсот двадцать пять рублей
31187 - тридцать одна тысяча сто восемьдесят семь рублей
9436 - девять тысяч четыреста тридцать шесть рублей
50028 - пятьдесят тысяч двадцать восемь рублей
52954 - пятьдесят две тысячи девятьсот пятьдесят четыре рубля
44357 - сорок четыре тысячи триста пятьдесят семь рублей
18209 - восемнадцать тысяч двести девять рублей
41806 - сорок одна тысяча восемьсот шесть рублей
24732 - двадцать четыре тысячи семьсот тридцать два рубля
31467 - тридцать одна тысяча четыреста шестьдесят семь рублей
13686 - тринадцать тысяч шестьсот восемьдесят шесть рублей
12600 - двенадцать тысяч шестьсот рублей
10021 - десять тысяч двадцать один рубль
14360 - четырнадцать тысяч триста шестьдесят рублей
22902 - двадцать две тысячи девятьсот два рубля
17918 - семнадцать тысяч девятьсот восемнадцать рублей
20260 - двадцать тысяч двести шестьдесят рублей
6096 - шесть тысяч девяносто шесть рублей
9080 - девять тысяч восемьдесят рублей
16835 - шестнадцать тысяч восемьсот тридцать пять рублей
4157 - четыре тысячи сто пятьдесят семь рублей
7898 - семь тысяч восемьсот девяносто восемь рублей
14333 - четырнадцать тысяч триста тридцать три рубля
11138 - одиннадцать тысяч сто тридцать восемь рублей
842 - восемьсот сорок два рубля
7781 - семь тысяч семьсот восемьдесят один рубль
13031 - тринадцать тысяч тридцать один рубль
2789 - две тысячи семьсот восемьдесят девять рублей
9186 - девять тысяч сто восемьдесят шесть рублей
6916 - шесть тысяч девятьсот шестнадцать рублей
3923 - три тысячи девятьсот двадцать три рубля
364 - триста шестьдесят четыре рубля
5159 - пять тысяч сто пятьдесят девять рублей
3851 - три тысячи восемьсот пятьдесят один рубль
1603 - одна тысяча шестьсот три рубля
2564 - две тысячи пятьсот шестьдесят четыре рубля
4146 - четыре тысячи сто сорок шесть рублей
2922 - две тысячи девятьсот двадцать два рубля
129 - сто двадцать девять рублей
4256 - четыре тысячи двести пятьдесят шесть рублей
4789 - четыре тысячи семьсот восемьдесят девять рублей
4508 - четыре тысячи пятьсот восемь рублей
3068 - три тысячи шестьдесят восемь рублей
3777 - три тысячи семьсот семьдесят семь рублей
414 - четыреста четырнадцать рублей
878 - восемьсот семьдесят восемь рублей
2402 - две тысячи четыреста два рубля
375 - триста семьдесят пять рублей
1071 - одна тысяча семьдесят один рубль
264 - двести шестьдесят четыре рубля
723 - семьсот двадцать три рубля
1480 - одна тысяча четыреста восемьдесят рублей
2263 - две тысячи двести шестьдесят три рубля
1822 - одна тысяча восемьсот двадцать два рубля
251 - двести пятьдесят один рубль
1282 - одна тысяча двести восемьдесят два рубля
406 - четыреста шесть рублей
1053 - одна тысяча пятьдесят три рубля
1337 - одна тысяча триста тридцать семь рублей
89 - восемьдесят девять рублей
613 - шестьсот тринадцать рублей
5 - пять рублей
265 - двести шестьдесят пять рублей
110 - сто десять рублей
632 - шестьсот тридцать два рубля
388 - триста восемьдесят восемь рублей
540 - пятьсот сорок рублей
109 - сто девять рублей
369 - триста шестьдесят девять рублей
714 - семьсот четырнадцать рублей
100 - сто рублей
460 - четыреста шестьдесят рублей
503 - пятьсот три рубля
348 - триста сорок восемь рублей
108 - сто восемь рублей
318 - триста восемнадцать рублей
185 - сто восемьдесят пять рублей
292 - двести девяносто два рубля
236 - двести тридцать шесть рублей
36 - тридцать шесть рублей
2 - два рубля
55 - пятьдесят пять рублей
92 - девяносто два рубля
192 - сто девяносто два рубля
111 - сто одиннадцать рублей
77 - семьдесят семь рублей
66 - шестьдесят шесть рублей
98 - девяносто восемь рублей
5 - пять рублей
120 - сто двадцать рублей
144 - сто сорок четыре рубля
154 - сто пятьдесят четыре рубля
98 - девяносто восемь рублей
56 - пятьдесят шесть рублей
105 - сто пять рублей
74 - семьдесят четыре рубля
40 - сорок рублей
46 - сорок шесть рублей
100 - сто рублей
91 - девяносто один рубль
66 - шестьдесят шесть рублей
57 - пятьдесят семь рублей
73 - семьдесят три рубля
65 - шестьдесят пять рублей
41 - сорок один рубль
12 - двенадцать рублей
9 - девять рублей
48 - сорок восемь рублей
17 - семнадцать рублей
43 - сорок три рубля
31 - тридцать один рубль
9 - девять рублей
38 - тридцать восемь рублей
0 - ноль рублей
11 - одиннадцать рублей
16 - шестнадцать рублей
4 - четыре рубля
4 - четыре рубля
15 - пятнадцать рублей
17 - семнадцать рублей
22 - двадцать два рубля
21 - двадцать один рубль
0 - ноль рублей
0 - ноль рублей
1 - один рубль
4 - четыре рубля
10 - десять рублей
12 - двенадцать рублей
7 - семь рублей
10 - десять рублей
7 - семь рублей
6 - шесть рублей
10 - десять рублей
0 - ноль рублей
8 - восемь рублей
1 - один рубль
6 - шесть рублей
0 - ноль рублей
6 - шесть рублей
0 - ноль рублей
3 - три рубля
4 - четыре рубля
1 - один рубль
2 - два рубля
0 - ноль рублей
0 - ноль рублей
2 - два рубля
3 - три рубля
3 - три рубля
0 - ноль рублей
0 - ноль рублей
2 - два рубля
0 - ноль рублей
2 - два рубля
1 - один рубль
0 - ноль рублей
2 - два рубля
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей