#include <stdio.h>
#include <math.h>

int pot(int x, int n)
{
    int i,p;

    for (p=1,i=1; i<=n; i++)
        p = p*x;
    return p;
}

int quadrato(int n)
{
    ///return n*n;
    return pot(n,2);
}

int cubo(int n)
{
    /// return n*n*n;
    return n*quadrato(n);
}



double fattoriale(int n)
{
    double fat =1.0;
    int i;
    for(i=2; i <= n; i++)
        fat=fat*i;
    return fat;
}

void linea(int n)  /// NB: siccome e' void NON ritorna niente, manca il return!
{
    int i;
    for(i=1; i <= n; i++)
        putchar('*');
    putchar('\n');
}

void quadrato_asterischi(int n)
{
    int i;
    for(i=1; i<= n; i++)
        linea(n);
}

void quadrato2(int n)
{
    int i,j;
    for(i=0; i < n; i++)
    {
        for(j=0; j < n; j++)
            putchar('*');
        putchar('\n');
    }
}


int main()
{
    int base,esponente,risultato;
    int i;
    int n;
    /** printf("Base->");
     scanf("%d",&base);
     printf("Esponente->");
     scanf("%d",&esponente);
     risultato=pot(base,esponente);
     printf("%d elevato alla %d fa %d (con pot() )\n",base,esponente,risultato);
     risultato=pow(base,esponente);
     printf("%d elevato alla %d fa (con pow() in math.h) %d\n",base,esponente,risultato);***/

    printf("Dammi un numero e visualizzo il quadrato, il cubo e il fattoriale ->");
    scanf("%d",&n);
    printf("Il quadrato e' %d, il cubo e' %d\n",quadrato(n),cubo(n));
    printf("Il fattoriale e' %20.0lf\n",fattoriale(n));
    printf("Un quadrato di asterischi:\n");
    quadrato_asterischi(n);
    printf("Ancora un quadrato di asterischi:\n");
    quadrato2(n);
    return 0;
}
