@ 2017-04-04T21:05:06Z <?php
error_reporting(-1);
mb_internal_encoding('utf-8');
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
//создадим массивы в массиве, чтобы можно было искать по типу $массив[k][i] где
//k это тип слова (зависит от обрабатываемой тройки цифр), а i рассчитывается по алгоритму{
function inclineWord($number, $type) {
$type1 = array(
0 => 'миллион', 1 => 'миллиона', 2 => 'миллионов'
);
$type2 = array(
0 => 'тысяча', 1 => 'тысячи', 2 => 'тысяч'
);
$type3 = array(
0 => 'рубль.', 1 => 'рубля.', 2 => 'рублей.'
);
$union = array(
0 => $type1, 1 => $type2, 2 => $type3
);
$i = getFinalWord($number);
return ($union[$type][$i]);
}
//}
function smallNumberToText($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 => 'две'
);
$words = array();
//сотни{
if ($number > 99){
$words[0] = $spelling[(floor($number/100))*100];
}
//}
//две последних цифры, у которых может быть своё общее название{
$check = $number % 100;
if ($check >= 10 && $check <= 19){
$words[1] = $spelling[$check];
//если общего названия нет, то работаем с каждой цифрой по отдельности
} else {
//десятки
if ((floor($check/10))*10 <> 0){
$words[1] = $spelling[(floor($check/10))*10];
}
//единицы
if ($check % 10 <> 0){
if($isFemale == true && ($check % 10 <= 2)){
$words[2] = $femaleSpelling[$check % 10];
}else{
$words[2] = $spelling[$check % 10];
}
}
}
//}
$text = implode(" ", $words);
return $text;
}
//разбиваем исходное число на тройки и помещаем в массив{
function spellSmallNumber($number){
$numbers = array();
$numbers[0] = floor($number / 1000000);
$numbers[1] = floor(($number % 1000000)/1000);
$numbers[2] = $number % 1000;
return ($numbers);
}
//}
function numberToText($number) {
$text = "";
//если цифра задана 0, но и считать её не нужно, пишем "ноль"{
if ($number <> 0){
$numbers = spellSmallNumber($number);
//$count будет использоваться в массиве $union для поиска словоформ, при проходе каждой тройки увеличивается
//0 - миллионы, 1 - тысячи, 2 - сотни{
$count = 0;
//}
//будем писать все слова, составляющие цифру, в один финальный массив
//$i будет служить для счетчика ключа{
$i = 0;
$finalArray = array();
//}
foreach ($numbers as $oneNumber) {
//женский род только у тысячи, т.е. у типа 1{
if ($count == 1){
$isFemale = true;
}else{
$isFemale = false;
}
//}
//если группа из 3х цифр равна 0, то нет смысла искать ей слово разрядности и вообще превращать в слово
if ($oneNumber <> 0){
$finalArray[$i] = smallNumberToText($oneNumber, $isFemale);
$i++;
//если это последняя группа (сотни), то слова разрядности искать не нужно
if ($count <> 2){
$finalArray[$i] = inclineWord($oneNumber, $count);
$i++;
}
//}
}
//}
$count++;
}
$text = implode(" ", $finalArray);
} else {
$text = "ноль";
}
//}
return $text;
}
//работа с поиском нужной словоформы. для этого определим 2 последних числа
//и если они не в промежутке от 5 до 20, то работаем с последней цифрой{
function getFinalWord($number){
if ($number >= 5 && $number <= 20){
return(2);
} elseif($number >= 21){
$number = $number%10;
return(checking($number));
} else{
return(checking($number));
}
}
//}
function checking($number){
if ($number == 1){
return(0);
}elseif($number >= 2 && $number <= 4){
return(1);
}else{
return(2);
}
}
$amount1 = mt_rand(1,99999999);
//$amount1 = 7000000;
echo "{$amount1}\n";
$text1 = numberToText($amount1);
//ищем, какую форму надо поставить у слова "рубль"{
$finalWord = inclineWord($amount1 % 100, 2);
//}
echo "На вашем счету: {$text1} {$finalWord}\n";
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 7.3.12 0.009 0.006 14.84 7.3.11 0.007 0.004 14.85 7.3.10 0.010 0.006 14.64 7.3.9 0.012 0.006 14.75 7.3.8 0.003 0.012 15.25 7.3.7 0.000 0.008 14.71 7.3.6 0.000 0.016 14.52 7.3.5 0.010 0.007 14.59 7.3.4 0.008 0.004 15.09 7.3.3 0.010 0.007 14.87 7.3.2 0.003 0.012 16.68 7.3.1 0.010 0.003 16.75 7.3.0 0.006 0.009 16.80 7.2.24 0.007 0.010 15.08 7.2.23 0.009 0.009 15.02 7.2.22 0.000 0.009 15.18 7.2.21 0.007 0.007 15.22 7.2.20 0.003 0.010 15.13 7.2.19 0.003 0.009 15.18 7.2.18 0.003 0.010 15.20 7.2.17 0.006 0.009 14.94 7.2.16 0.004 0.014 14.98 7.2.15 0.006 0.010 16.93 7.2.14 0.006 0.009 16.83 7.2.13 0.009 0.006 16.99 7.2.12 0.011 0.003 16.84 7.2.11 0.006 0.009 16.71 7.2.10 0.007 0.003 16.98 7.2.9 0.010 0.007 17.00 7.2.8 0.003 0.013 16.89 7.2.7 0.006 0.010 16.83 7.2.6 0.010 0.010 16.67 7.2.5 0.007 0.014 17.02 7.2.4 0.006 0.013 16.80 7.2.3 0.003 0.014 16.84 7.2.2 0.010 0.006 16.84 7.2.1 0.013 0.006 17.03 7.2.0 0.007 0.010 16.88 7.1.33 0.007 0.010 15.88 7.1.32 0.004 0.004 15.57 7.1.31 0.008 0.008 15.68 7.1.30 0.000 0.010 15.69 7.1.29 0.000 0.013 15.93 7.1.28 0.003 0.010 15.87 7.1.27 0.004 0.014 15.86 7.1.26 0.004 0.011 15.90 7.1.25 0.009 0.003 15.84 7.1.7 0.000 0.010 17.09 7.1.6 0.006 0.011 17.19 7.1.5 0.012 0.009 16.96 7.1.3 0.317 0.057 36.64 7.1.2 0.033 0.060 36.53 7.1.1 0.017 0.077 20.59 7.1.0 0.277 0.060 20.55 7.0.20 0.006 0.010 16.77 7.0.17 0.257 0.057 20.08 7.0.16 0.047 0.057 20.14 7.0.15 0.020 0.053 20.16 7.0.14 0.227 0.060 20.06 7.0.13 0.303 0.080 20.15 7.0.12 0.313 0.093 20.23 7.0.11 0.260 0.073 20.14 7.0.10 0.237 0.087 20.07 7.0.9 0.217 0.087 20.20 7.0.8 0.180 0.057 20.19 7.0.7 0.293 0.053 20.29 7.0.6 0.183 0.053 20.37 7.0.5 0.157 0.063 20.20 7.0.4 0.317 0.080 20.11 7.0.3 0.320 0.057 20.30 7.0.2 0.277 0.070 20.02 7.0.1 0.223 0.060 20.12 7.0.0 0.240 0.083 20.14
preferences:dark mode live preview
36.15 ms | 400 KiB | 5 Q