fork(3) 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. $lastMillion = $millions % 10;
  61. if ($lastMillion == 1) {
  62. $typeMillions .= "миллион ";
  63. } elseif (($lastMillion > 1) & ($lastMillion < 5)) {
  64. $typeMillions .= "миллиона ";
  65. } elseif (($lastMillion >= 5) or (($lastMillion == 0) & ($millions > 0))) {
  66. $typeMillions .= "миллионов ";
  67. }
  68.  
  69. $typeTotal .= $typeMillions;
  70.  
  71. $thousands = floor(($number - $millions*1000000)/1000);
  72. $typeThousands = smallNumbers($thousands, true);
  73. $lastThousand = $thousands % 10;
  74. if ($lastThousand == 1) {
  75. $typeThousands .= "тысяча ";
  76. } elseif (($lastThousand > 1) & ($lastThousand < 5)) {
  77. $typeThousands .= "тысячи ";
  78. } elseif (($lastThousand >= 5) or (($lastThousand == 0) & ($thousands > 0))) {
  79. $typeThousands .= "тысяч ";
  80. }
  81.  
  82. $typeTotal .= $typeThousands;
  83.  
  84. $ones = $number % 1000;
  85. $typeOnes = smallNumbers($ones, false);
  86. $lastOne = $ones % 10;
  87. if ($lastOne == 1) {
  88. $typeOnes .= "рубль";
  89. } elseif (($lastOne > 1) & ($lastOne < 5)) {
  90. $typeOnes .= "рубля";
  91. } elseif (($lastOne >= 5) or ($lastOne == 0)) {
  92. $typeOnes .= "рублей";
  93. }
  94.  
  95. $typeTotal .= $typeOnes;
  96. }
  97. return $typeTotal;
  98. }
  99.  
  100. function tests($n) {
  101. for ($i=0,$j=1; $i < $n; $i++, $j*=1.2) {
  102.  
  103. $randomTestNumber = ceil(mt_rand(0, 999999999/$j));
  104. $typedTestNumber = typer($randomTestNumber);
  105.  
  106. echo "$randomTestNumber - $typedTestNumber\n";
  107. }
  108. }
  109.  
  110. tests(200);
  111.  
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
298298619 - двести девяносто восемь миллионов двести девяносто восемь тысяч шестьсот девятнадцать рублей
676619144 - шестьсот семьдесят шесть миллионов шестьсот девятнадцать тысяч сто сорок четыре рубля
531709923 - пятьсот тридцать один миллион семьсот девять тысяч девятьсот двадцать три рубля
337728222 - триста тридцать семь миллионов семьсот двадцать восемь тысяч двести двадцать два рубля
243916056 - двести сорок три миллиона девятьсот шестнадцать тысяч пятьдесят шесть рублей
396096107 - триста девяносто шесть миллионов девяносто шесть тысяч сто семь рублей
180051453 - сто восемьдесят миллионов пятьдесят одна тысяча четыреста пятьдесят три рубля
69004850 - шестьдесят девять миллионов четыре тысячи восемьсот пятьдесят рублей
158026312 - сто пятьдесят восемь миллионов двадцать шесть тысяч триста двенадцать рубля
38302390 - тридцать восемь миллионов триста две тысячи триста девяносто рублей
33580808 - тридцать три миллиона пятьсот восемьдесят тысяч восемьсот восемь рублей
23349807 - двадцать три миллиона триста сорок девять тысяч восемьсот семь рублей
14703289 - четырнадцать миллиона семьсот три тысячи двести восемьдесят девять рублей
57607223 - пятьдесят семь миллионов шестьсот семь тысяч двести двадцать три рубля
42884741 - сорок два миллиона восемьсот восемьдесят четыре тысячи семьсот сорок один рубль
61437666 - шестьдесят один миллион четыреста тридцать семь тысяч шестьсот шестьдесят шесть рублей
49235549 - сорок девять миллионов двести тридцать пять тысяч пятьсот сорок девять рублей
3932658 - три миллиона девятьсот тридцать две тысячи шестьсот пятьдесят восемь рублей
17224118 - семнадцать миллионов двести двадцать четыре тысячи сто восемнадцать рублей
2311713 - два миллиона триста одиннадцать тысяча семьсот тринадцать рубля
22824500 - двадцать два миллиона восемьсот двадцать четыре тысячи пятьсот рублей
17900136 - семнадцать миллионов девятьсот тысяч сто тридцать шесть рублей
2420578 - два миллиона четыреста двадцать тысяч пятьсот семьдесят восемь рублей
8749988 - восемь миллионов семьсот сорок девять тысяч девятьсот восемьдесят восемь рублей
6575752 - шесть миллионов пятьсот семьдесят пять тысяч семьсот пятьдесят два рубля
4840798 - четыре миллиона восемьсот сорок тысяч семьсот девяносто восемь рублей
3795178 - три миллиона семьсот девяносто пять тысяч сто семьдесят восемь рублей
1117739 - один миллион сто семнадцать тысяч семьсот тридцать девять рублей
2174287 - два миллиона сто семьдесят четыре тысячи двести восемьдесят семь рублей
302811 - триста две тысячи восемьсот одиннадцать рубль
293869 - двести девяносто три тысячи восемьсот шестьдесят девять рублей
3413929 - три миллиона четыреста тринадцать тысячи девятьсот двадцать девять рублей
1015618 - один миллион пятнадцать тысяч шестьсот восемнадцать рублей
2265652 - два миллиона двести шестьдесят пять тысяч шестьсот пятьдесят два рубля
53105 - пятьдесят три тысячи сто пять рублей
1493379 - один миллион четыреста девяносто три тысячи триста семьдесят девять рублей
976001 - девятьсот семьдесят шесть тысяч один рубль
1143377 - один миллион сто сорок три тысячи триста семьдесят семь рублей
485270 - четыреста восемьдесят пять тысяч двести семьдесят рублей
393394 - триста девяносто три тысячи триста девяносто четыре рубля
572024 - пятьсот семьдесят две тысячи двадцать четыре рубля
113901 - сто тринадцать тысячи девятьсот один рубль
71589 - семьдесят одна тысяча пятьсот восемьдесят девять рублей
197520 - сто девяносто семь тысяч пятьсот двадцать рублей
137127 - сто тридцать семь тысяч сто двадцать семь рублей
46243 - сорок шесть тысяч двести сорок три рубля
67975 - шестьдесят семь тысяч девятьсот семьдесят пять рублей
65 - шестьдесят пять рублей
43214 - сорок три тысячи двести четырнадцать рубля
77709 - семьдесят семь тысяч семьсот девять рублей
17580 - семнадцать тысяч пятьсот восемьдесят рублей
11596 - одиннадцать тысяча пятьсот девяносто шесть рублей
35866 - тридцать пять тысяч восемьсот шестьдесят шесть рублей
49417 - сорок девять тысяч четыреста семнадцать рублей
9679 - девять тысяч шестьсот семьдесят девять рублей
13901 - тринадцать тысячи девятьсот один рубль
4351 - четыре тысячи триста пятьдесят один рубль
16799 - шестнадцать тысяч семьсот девяносто девять рублей
24770 - двадцать четыре тысячи семьсот семьдесят рублей
6597 - шесть тысяч пятьсот девяносто семь рублей
17611 - семнадцать тысяч шестьсот одиннадцать рубль
7777 - семь тысяч семьсот семьдесят семь рублей
3920 - три тысячи девятьсот двадцать рублей
4834 - четыре тысячи восемьсот тридцать четыре рубля
2227 - две тысячи двести двадцать семь рублей
1347 - одна тысяча триста сорок семь рублей
5041 - пять тысяч сорок один рубль
1370 - одна тысяча триста семьдесят рублей
3628 - три тысячи шестьсот двадцать восемь рублей
1828 - одна тысяча восемьсот двадцать восемь рублей
1549 - одна тысяча пятьсот сорок девять рублей
96 - девяносто шесть рублей
1696 - одна тысяча шестьсот девяносто шесть рублей
1066 - одна тысяча шестьдесят шесть рублей
577 - пятьсот семьдесят семь рублей
1106 - одна тысяча сто шесть рублей
548 - пятьсот сорок восемь рублей
198 - сто девяносто восемь рублей
529 - пятьсот двадцать девять рублей
146 - сто сорок шесть рублей
204 - двести четыре рубля
221 - двести двадцать один рубль
56 - пятьдесят шесть рублей
165 - сто шестьдесят пять рублей
197 - сто девяносто семь рублей
91 - девяносто один рубль
146 - сто сорок шесть рублей
34 - тридцать четыре рубля
68 - шестьдесят восемь рублей
67 - шестьдесят семь рублей
60 - шестьдесят рублей
24 - двадцать четыре рубля
50 - пятьдесят рублей
40 - сорок рублей
30 - тридцать рублей
3 - три рубля
5 - пять рублей
16 - шестнадцать рублей
10 - десять рублей
2 - два рубля
11 - одиннадцать рубль
4 - четыре рубля
5 - пять рублей
2 - два рубля
5 - пять рублей
3 - три рубля
4 - четыре рубля
0 - ноль рублей
0 - ноль рублей
1 - один рубль
0 - ноль рублей
1 - один рубль
1 - один рубль
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей
0 - ноль рублей