Y aun otra forma mas divertida de hacerlo:
#include <stdio.h>
#include <stdlib.h>
#define MAX 10000
struct NodoEntero
{
unsigned char cifra;
NodoEntero* Enlace;
};
typedef struct NodoEntero NodoEntero;
typedef NodoEntero* ptrNodoEntero;
void push(ptrNodoEntero* Base,unsigned char valor);
unsigned char pop(ptrNodoEntero*);
char pila_vacia(ptrNodoEntero);
int main(int argc,char* argv[])
{
int numero,numcifras=0,potenciaDiez=1;
ptrNodoEntero basePila=NULL;
do{
printf("Introduce un numero entre 1 y %d (ambos incluidos): ",MAX);
fflush(stdin);
scanf("%d",&numero);
}while(numero<0 || numero>MAX);
do{
push(&basePila,numero%10);
numero/=10;
numcifras++;
}while(numero!=0);
printf("El numero tiene %d cifras\n",numcifras);
do{
numero += potenciaDiez * pop(&basePila);
potenciaDiez*=10;
}while(!pila_vacia(basePila));
printf("El numero invertido es: %d\n",numero);
system("PAUSE");
}
void push(ptrNodoEntero* Base,unsigned char valor)
{
ptrNodoEntero NuevoNodo;
NuevoNodo=(NodoEntero*)malloc(sizeof(NodoEntero));
NuevoNodo->cifra=valor;
NuevoNodo->Enlace=(*Base);
(*Base)=NuevoNodo;
}
unsigned char pop(ptrNodoEntero* Base)
{
ptrNodoEntero Aux;
unsigned char ret;
Aux=(*Base);
ret=(*Base)->cifra;
(*Base)=(*Base)->Enlace;
free(Aux);
return ret;
}
char pila_vacia(ptrNodoEntero Base)
{
return (Base==NULL ? 1 : 0);
}
Jejeje, a ver si cae otra forma....
¿Se nota que me aburro?
Un saludo!!!!!!!!!!!!!