<?php
error_reporting(-1);

function smallNumbers($number, $isFemale) {
	$spelling = array(
		0 => 'ноль ',   10 => 'десять ',       100 => 'сто ',
		1 => 'один ',   11 => 'одиннадцать ',  20 => 'двадцать ',    200 => 'двести ',
		2 => 'два ',    12 => 'двенадцать ',   30 => 'тридцать ',    300 => 'триста ',
		3 => 'три ',    13 => 'тринадцать ',   40 => 'сорок ',       400 => 'четыреста ',
		4 => 'четыре ', 14 => 'четырнадцать ', 50 => 'пятьдесят ',   500 => 'пятьсот ',
		5 => 'пять ',   15 => 'пятнадцать ',   60 => 'шестьдесят ',  600 => 'шестьсот ',
		6 => 'шесть ',  16 => 'шестнадцать ',  70 => 'семьдесят ',   700 => 'семьсот ',
		7 => 'семь ',   17 => 'семнадцать ',   80 => 'восемьдесят ', 800 => 'восемьсот ',
		8 => 'восемь ', 18 => 'восемнадцать ', 90 => 'девяносто ',   900 => 'девятьсот ',
		9 => 'девять ', 19 => 'девятнадцать '
	);
 
	$femaleSpelling = array(
		1 => 'одна ', 2 => 'две '
	);
 
	$result = '';
	$hundreds = 0; $tens = 0; $ones = 0;
 
	$hundreds = (floor($number/100))*100;
	if ($hundreds >= 100) {
		$result .= $spelling[$hundreds];
	}
 
	$remains = $number - $hundreds;
	
	if ($remains == 0) {
		return $result;
	} elseif ($remains >= 20) {
		$tens = (floor($remains/10))*10;
		$result .= $spelling[$tens];
 
		$ones = $remains - $tens;
		if (($ones < 3) && ($ones > 0) && ($isFemale == true)) {
			$result .= $femaleSpelling[$ones];
		} elseif ($ones > 0) {
			$result .= $spelling[$ones];
		}
	} elseif (($remains < 20) && ($isFemale == false)) {
		$result .= $spelling[$remains];
	} elseif (($remains < 3) && ($isFemale == true)) {
		$result .= $femaleSpelling[$remains];
	} else {
		$result .= $spelling[$remains];
	}
 
	return $result;
} 

function typeEnding ($number, $power) {
	$typing = array(
		array('миллион ', 'миллионов ', 'миллиона '),
		array('тысяча ',  'тысяч ',     'тысячи '),
		array('рубль ',   'рублей ',    'рубля ')
	);
	$ending ="";
	$lastNumbers = $number % 10;
 
	if ((($number%100<=20) & ($number%100>=5)) or (($lastNumbers>=5) or (($lastNumbers==0) and ($number>0)))) {
	$ending .= $typing[$power][1];
	} elseif ($lastNumbers == 1) {
	$ending .= $typing[$power][0];
	} elseif (($lastNumbers > 1) & ($lastNumbers < 5)) {
	$ending .= $typing[$power][2];
	}
	return $ending;
}

function typeNumbers ($number) {
	$typeTotal ="";
	if ($number == 0) {
		$typeTotal .= "ноль рублей";
		return $typeTotal;
	}
	
	$millions = floor($number/1000000);
	$typeTotal .= smallNumbers($millions, false);
	$typeTotal .= typeEnding($millions, 0);

	$thousands = floor(($number - $millions*1000000)/1000);
	$typeTotal .= smallNumbers($thousands, true);
	$typeTotal .= typeEnding($thousands, 1);
	
	$ones = $number % 1000;
	$typeTotal .= smallNumbers($ones, false);
	$typeTotal .= typeEnding($ones, 2);
	
	return $typeTotal;
}

function tests($n, $k) {
	for ($i=0,$j=1; $i < $n; $i++, $j*=$k) {
 
	$randomTestNumber = ceil(mt_rand(0, 999999999/$j));
	$typedTestNumber = typeNumbers($randomTestNumber);
 
	echo "$randomTestNumber - $typedTestNumber\n";
	}
}
 
tests(300, 1.07);