PHP :: Aufgabe #191

4 Lösungen Lösungen öffentlich

Rekursieve Fakultät von n

Fortgeschrittener - PHP von FHEM - 22.07.2018 um 19:09 Uhr
Erstelle ein programm das n! = 120 zum beispiel nach n auflöst.
Ansatz: 5! =5*4*3*2*1 also müsste n=120/5/4/3/2/1

Lösungen:

1x
vote_ok
von Holzi (430 Punkte) - 29.08.2018 um 13:03 Uhr
Quellcode ausblenden PHP-Code
<?php

const template = <<<'Template'
<form action="#" method="post">
	<input type="number" name="Zahl">
	<button type="submit">Abschicken</button>
</form>
<br>
Template;

echo template;

if (isset($_POST['Zahl']))
{
	$eingabe = intval($_POST['Zahl']);
}
else
{
	$eingabe = 120;
}

$finished = false;

$i = 0;
$fak = 1;

$erg = false;

while ($finished === false)
{
	$i++;
	$fak *= $i;
	
	if ($eingabe === $fak)
	{
		$finished = true;
		$erg = true;
	}
	else if ($eingabe <= $fak)
	{
		$finished = true;
	}
}

if ($erg === true)
{
	echo $eingabe . ' = !' . $i;
}
else
{
	echo $eingabe . ' hat keine Fakultät.';
}
vote_ok
von syneex (2670 Punkte) - 29.08.2018 um 13:30 Uhr
Quellcode ausblenden PHP-Code
<?php
//Lösung 1: Liefert nächstes Fakultätsergebnis nach eingegebenem
$number = 120;
$zahl = 1;
$bool = true;

echo "Lösung 1:<br><br>";

while($bool)
{
	if(faku($zahl) == $number)
	{
		$bool = false;
		echo "Die gesuchte Zahl ist " . $zahl;
	}
	if(faku($zahl) != $number)
	{
		$zahl += 1;
		faku($zahl);
	}
	if(faku($zahl) > $number)
	{
		echo faku($zahl) . " (" . $zahl . "!) ist das nächste gültige Fakultätsergebnis nach " . $number;
		$bool = false;
	}
}

function faku($int)
{
	$erg;
	if($int == 1)
	{
		$erg = 1;
	}
	else
	{
		$erg = $int * faku($int-1);
	}
	return $erg;
}


//Lösung 2: Lösung mit Array, Bei ungültiger Eingabe muss neu eingegeben werden!

echo "<br><br><br>Lösung 2:<br><br>";

$array = array();

for($i = 1; $i <= 99; $i++)
{
	$array[$i] = faku($i);
}

if(in_array($number, $array))
{
	echo "Die gesuchte Zahl ist " . array_search($number, $array);
}
else
{
	echo "Bitte gültiges Fakultätsergebnis eingeben!";
}
?>
vote_ok
von f.hubert17 (150 Punkte) - 28.03.2019 um 11:38 Uhr
Quellcode ausblenden PHP-Code
<?php

	$n = 720;
	$p = $n;
	$i = 1;
	$geloest = FALSE;
	while ($geloest == FALSE)
	{
		if ($n == 0)
		{
			$geloest = TRUE;
			echo "0! ergibt 1";
		}
		if ($n < 1 && $geloest == FALSE)
		{
			$geloest = TRUE;
			echo "für ".$p." gibt es keine ganzzahlige Fakultät!";
		}
		else
		{
			$n = $n/$i;
			if ($n == 1)
			{
				$geloest = TRUE;
				echo $i."! ergibt ".$p;
			}
			$i++;
		}
	}

?>
vote_ok
von joelbladt (80 Punkte) - 03.05.2019 um 23:36 Uhr
Quellcode ausblenden PHP-Code
<?php

(int)$i = 1;
(int)$number = 3;

function factorial(float $val) : float {
    return $val == 1 ? 1 : $val * factorial($val-1);
}

function calcMethod(float $val) : string {
    return $val == 1 ? 1 : $val . ' * ' . calcMethod($val-1);
}

while(true) {
    if (factorial($i) == $number) {
        echo 'The number you are looking for is ' . (string)$i . ' (' . (string)calcMethod($i) . ')';
        break;
    } else if (factorial($i) > $number) {
        echo 'The next valid factorial result after ' . (string)$number . ' is ' . (string)factorial($i) . ' (' . (string)calcMethod($i) . ')';
        break;
    } else {
        $i++;
        factorial($i);
    }
}