Nadesłany przez Karol Nowacki, 13 kwietnia 2011 13:22
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
zlns_gramatyka_1_php.php:
<?php //zamiana liczby na słowa z uwzględnieniem polskiej gramatyki //www.algorytm.org function numberToText($liczba) { $separator = ' '; $jednosci = array('', ' jeden', ' dwa', ' trzy', ' cztery', ' pięć', ' sześć', ' siedem', ' osiem', ' dziewięć'); $nascie = array('', ' jedenaście', ' dwanaście', ' trzynaście', ' czternaście', ' piętnaście', ' szesnaście', ' siedemnaście', ' osiemnaście', ' dziewietnaście'); $dziesiatki = array('', ' dziesieć', ' dwadzieścia', ' trzydzieści', ' czterdzieści', ' pięćdziesiąt', ' sześćdziesiąt', ' siedemdziesiąt', ' osiemdziesiąt', ' dziewięćdziesiąt'); $setki = array('', ' sto', ' dwieście', ' trzysta', ' czterysta', ' pięćset', ' sześćset', ' siedemset', ' osiemset', ' dziewięćset'); $grupy = array( array('' ,'' ,''), array(' tysiąc' ,' tysiące' ,' tysięcy'), array(' milion' ,' miliony' ,' milionów'), array(' miliard',' miliardy',' miliardów'), array(' bilion' ,' biliony' ,' bilionów'), array(' biliard',' biliardy',' biliardów'), array(' trylion',' tryliony',' trylionów') ); $wynik = ''; $znak = ''; if ($liczba == 0) return 'zero'; if ($liczba < 0) { $znak = 'minus'; $liczba = -$liczba; } $g = 0; while ($liczba > 0) { $s = floor(($liczba % 1000)/100); $n = 0; $d = floor(($liczba % 100)/10); $j = floor($liczba % 10); if ($d == 1 && $j>0) { $n = $j; $d = $j = 0; } $k = 2; if ($j == 1 && $s+$d+$n == 0) $k = 0; if ($j == 2 || $j == 3 || $j == 4) $k = 1; if ($s+$d+$n+$j > 0) $wynik = $setki[$s].$dziesiatki[$d].$nascie[$n].$jednosci[$j].$grupy[$g][$k].$wynik; $g++; $liczba = floor($liczba/1000); } return trim($znak.$wynik); } for ($i = 0; $i<10; $i++) { $l = rand(0, 1000000000) - 500000000; echo $l.' = '.numberToText($l).'<br />'.PHP_EOL; }