@ 2017-04-26T13:04:54Z <?php
/*
Дана сумма, находящаяся в банке на счету, в рублях.
Вывести ее в текстовом виде вроде "шестнадцать миллионов десять тысяч три (16010003) рубля".
*/
error_reporting(-1);
mb_internal_encoding('UTF-8');
/* Делает первую букву предложения заглавной */
function makeFirstLetterUppercase($text)
{
$text = mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1, NULL);
return $text;
}
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number, $word1, $word2, $word5)
{
$exception = $number;
$number = $number % 10;
if (($number == 1) && ($exception != 11)) {
return $word1;
} elseif (($number >= 2) && ($number <= 4) && (($exception <= 10) || ($exception >= 15))) {
return $word2;
} else {
return $word5;
}
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
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 => 'девятнадцать'
);
if (($isFemale == 1) || ($isFemale == 2)) {
$spelling[1] = 'одна';
$spelling[2] = 'две';
}
$firstDigit = floor($number / 100) * 100; // Получаем кол-во сотен (900 из числа 985)
$middleDigit = floor(($number % 100) / 10) * 10; // Получаем кол-во десятков (80 из числа 985)
$lastDigit = $number % 10; // Получаем кол-во единиц (5 из числа 985)
if ($firstDigit != 0) {
$text[] = $spelling[$firstDigit];
}
if (($middleDigit != 0) && ($middleDigit >= 20)) {
$text[] = $spelling[$middleDigit];
} elseif (($middleDigit != 0) && ($middleDigit <= 19)) {
$text[] = $spelling[$middleDigit + $lastDigit];
$lastDigit = 0;
}
if ($lastDigit != 0) {
$text[] = $spelling[$lastDigit];
}
return implode($text, ' ');
}
function numberToText($number)
{
$millions = floor($number / 1000000); // Получаем кол-во миллинов (99 из числа 99965985)
$thousands = floor(($number % 1000000) / 1000); // Получаем кол-во тысяч (965 из числа 99965985)
$hundreds = $number % 1000; // Получаем кол-во сотен (985 из числа 99965985)
if ($millions != 0) {
$text[] = smallNumberToText($millions, 0) . inclineWord($millions % 10, ' миллион', ' миллиона', ' миллионов');
}
if ($thousands != 0) {
$text[] = smallNumberToText($thousands, $thousands % 10) . inclineWord($thousands % 10, ' тысяча', ' тысячи', ' тысяч');
}
if ($hundreds != 0) {
$text[] = smallNumberToText($hundreds, 0) . inclineWord($hundreds, ' рубль', ' рубля', ' рублей');
}
if ($number == 0) {
$text[] = '0 рублей';
}
$text = makeFirstLetterUppercase(implode($text, ' ') . " ({$number})");
return $text;
}
$amount1 = mt_rand(0, 99999999);
$text1 = numberToText($amount1);
echo "На вашем счету: {$text1}\n";
$amount2 = mt_rand(0, 99999999);
$text2 = numberToText($amount2);
echo "На вашем счету: {$text2}\n";
$amount3 = mt_rand(0, 99999999);
$text3 = numberToText($amount3);
echo "На вашем счету: {$text3}\n";
$amount4 = mt_rand(0, 99999999);
$text4 = numberToText($amount4);
echo "На вашем счету: {$text4}\n";
$amount5 = mt_rand(0, 99999999);
$text5 = numberToText($amount5);
echo "На вашем счету: {$text5}\n";
$amount6 = mt_rand(0, 99999999);
$text6 = numberToText($amount6);
echo "На вашем счету: {$text6}\n";
for ($i = 0; $i < 101; $i++) {
$text7 = numberToText($i);
echo "На вашем счету: {$text7}\n";
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Abusive script This script was stopped while abusing our resources
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.4.0 0.006 0.012 14.75 7.3.12 0.009 0.009 14.78 7.3.11 0.007 0.011 14.90 7.3.10 0.009 0.006 14.77 7.3.9 0.003 0.009 15.16 7.3.8 0.006 0.009 15.02 7.3.7 0.006 0.009 14.60 7.3.6 0.010 0.007 14.70 7.3.5 0.008 0.004 14.91 7.3.4 0.007 0.010 15.00 7.3.3 0.000 0.015 14.93 7.3.2 0.011 0.003 16.70 7.3.1 0.010 0.006 16.52 7.3.0 0.006 0.006 16.76 7.2.25 0.000 0.016 14.91 7.2.24 0.014 0.007 15.36 7.2.23 0.007 0.013 14.97 7.2.22 0.000 0.011 14.95 7.2.21 0.003 0.015 15.36 7.2.20 0.010 0.007 15.29 7.2.19 0.000 0.017 15.05 7.2.18 0.004 0.009 14.89 7.2.17 0.006 0.013 15.15 7.1.33 0.006 0.009 15.69 7.1.32 0.006 0.009 15.92 7.1.31 0.006 0.009 15.89 7.1.30 0.010 0.006 15.84 7.1.29 0.009 0.006 16.00 7.1.28 0.007 0.010 15.91 7.1.27 0.010 0.006 15.97 7.1.26 0.017 0.000 15.91 7.1.7 0.006 0.008 17.39 7.1.6 0.006 0.009 17.38 7.1.5 0.003 0.019 17.00 7.1.4 0.023 0.007 34.33 7.1.3 0.010 0.023 34.36 7.1.2 0.023 0.010 34.46 7.1.1 0.007 0.010 16.50 7.1.0 0.003 0.013 16.68 7.0.20 0.014 0.007 16.71 7.0.18 0.000 0.023 16.14 7.0.17 0.010 0.007 16.23 7.0.16 0.003 0.013 16.23 7.0.15 0.010 0.013 16.37 7.0.14 0.003 0.010 16.03 7.0.13 0.007 0.010 16.64 7.0.12 0.007 0.010 16.42 7.0.11 0.007 0.010 16.22 7.0.10 0.007 0.010 16.44 7.0.9 0.003 0.013 16.43 7.0.8 0.000 0.013 16.38 7.0.7 0.000 0.017 16.47 7.0.6 0.003 0.010 15.96 7.0.5 0.010 0.003 16.27 7.0.4 0.003 0.017 16.43 7.0.3 0.000 0.017 16.47 7.0.2 0.003 0.010 16.66 7.0.1 0.007 0.010 16.53 7.0.0 0.000 0.013 16.46
preferences:dark mode live preview ace vim emacs key bindings
42.77 ms | 403 KiB | 5 Q