Problema urmatoare este enuntata pe site-ul www.programmr.com si
face apel la notiunile de functie, string, tablou, instructiuni de decizie si
ciclare.
Enuntul:
If a negative number with even digits other than 0 is passed to the method, the result should also be negative.
Leading zeros in the result should be ignored and if there are no
even digits other than 0 in the number, the method should return 0."
Rezolvarea propusa in codul urmator face abstractie de functiile
accesibile in manipularea sirurilor se caractere. De pilda, lungimea stringului
in care sunt stocate cifrele si eventualul semn al numarului introdus de la
tastatura se determina intr-o bucla while si nu cu strlen().
O chestiune netriviala apare in cerinta " leading zeros in
the result should be ignored..."
Rezolvarea tine cont de bunul simt.
Pentru a fi indreptatiti sa punem
valoarea zero intr-un element al array-ului in care pastram cifrele
rezultatului, trebuie ca anterior acest array sa fi fost initializat. Iar codul
permite initializarea DOAR daca anterior a fost detectata o cifra para (%2 ==
0) nenula.
Chestiunea este adresata de doua ori, corespunzatoare
situatiilor "nr cu semn" si "nr fara semn", in blocul
functiei f_evens cu linia alternativa:
else if($z !== "") $z[] = 0;
$z[] fiind tabloul in care sunt stocati digitii rezultatului.
Codul si printscreen-urile de validare in consola intepretorului php, respectiv pe programmr.com, in continuare.
<?php
// Submitted by
Valentin
echo "Enter
a number:";
$x = trim(fgets(STDIN));
$i = 0;
$x1 = $x;
while($x1)
{
$x1 =
(int)($x1/10);
$i++;
}
//echo $i."\n";
function f_evens($w)
{
global
$i;
$count =
0;
$sign =
0;
$z =
"";
if($w[0]
=== "-")
{
$sign
= 1;
for($j
= 1; $j <= $i; $j++)
{
if(!($w[$j]%2))
{
if($w[$j]
!= 0)
{
$count++;
$z[]
= $w[$j];
}
else
if($z !== "") $z[] = 0;
}
}
}
else
for($j
= 0; $j < $i; $j++)
{
if(!($w[$j]%2))
{
if($w[$j]
!= 0)
{
$count++;
$z[]
= $w[$j];
}
else
if($z !== "") $z[] = 0;
}
}
if($count)
{
if($sign)
echo "-";
foreach($z
as $k) echo $k;
}
else
echo "0";
}
$y = "$x";
f_evens($y);
?>
No comments:
Post a Comment