Usando un poco de matemáticas:
Si tienes bielletes de 200,100,50,o 20
Divide ... por 200 y tendrás los billetes de 200 .. el resto lo divides por 100 y tendras los de 100 .. el resto lo divides por 50 y tendras los de 50 .. el resto lo divides por 20 y tendrás los de 20 ...
Sólo tienes que tener en cuenta que si el resto que obtienes es menor que el billete (500,200,50 ... etc) .. no has de contabilizarlo en ese grupo de billetes.
En "PHP" el resto de una división lo puedes obtener con:
$resto=$dividendo % $divisor;
Si tienes tus billetes (los rangos de billetes que puedes trabajar) en un array .. puedes recorrerlo con un bucle foreach() facilmente para hacer las operaciones pertinentes .. A su vez puedes crearte un array de "cambio billetes" ...
Sería algo así:
Código PHP:
<?
$cambio=1571;
$billetes=array(500,200,50,20,1);
$resto=$cambio;
foreach($billetes as $billete){
// compruebo que el resto no sea mayor que el grupo de billetes
// que deseo ver cuantos he de entregar.
if ($resto >= $billete){
// redondeo y obtengo los billetes
$billetes_de=round($resto/$billete);
// Me los guardo en un array asociativo
$cambio_billetes[$billete]=$billetes_de;
// Obtengo el resto ..
$resto=$resto%$billete;
}
}
// leo el array que contiene los totales de los billetes que he de entregar de cambio.
foreach($cambio_billetes as $billete=>$total_billetes){
echo "Billete de: ".$billete." = Entregar => ".$total_billetes."<br>";
}
?>
He incluido como "billete" al 1 .. más bien seria moneda .. Si no lo quieres .. eliminalo del array de billetes .. Como verás podrías incluir en dicho array todo el rango de billetes y monedas que tenga la moneda del pais que requieras y obtendrias el cambio exacto desglosado ...
Por lo mismo .. la rutina es fácilmente adaptable a otros sistemas monetarios de otros paises ...
Un saludo,