/****************************************************************************/
/* Factorial de un numero, utiliza la libreria LIP para manejar             */
/* enteros de longitud arbitraria.                                          */
/*                                                                          */
/* Jaime Suarez <mcripto@bigfoot.com> 2003                                  */
/* en http://elparaiso.mat.uned.es                                            */
/****************************************************************************/

#include <stdio.h>

#include "lip.h"

main(int argc, char *argv[])
{
    verylong n=0, fact=0, uno=0, tmp=0;

    if (argc!=2) {
        printf("fact <n>, calcula el factorial de un entero positivo.\n");
        return 1;
    }
    
    zsread(argv[1],&n);            /* n=argv[1]    */
    zone(&fact); zone(&uno);       /* fact=1 uno=1 */
    while(zcompare(n,uno)) {
        zmul(fact,n,&tmp);         /* fact= fact*n */
        zcopy(tmp,&fact);
        zsub(n,uno,&tmp);          /* n=n-1        */
        zcopy(tmp,&n);
    }
    zwriteln(fact);
    return 0;
}