Hola tengo que invertir un numero utilizando colas el problema es que cuando ingreso numeros con mas de 2 cigras me devuelve datos erroneos , si ingreso un 23 devuelve 32, si ingreso 321 me devuelve 1203 y asi, no se si mi algoritmo esta mal planteado o que, el "algoritmo" esta en el programa principal, desde ya gracias
Ya lo solucione ;-)
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
const int MAX=20;
typedef int contenedor[MAX];
typedef struct tcola{
contenedor datos;
int final, frente;
};
void init_queue(tcola &q);
void push_queue(tcola &q, int nuevo);
bool full_queue(tcola q);
bool empty_queue(tcola q);
int pop_queue(tcola &q);
int top_queue(tcola q);
int bottom_queue(tcola q);
int next(int indice);
int main()
{
int numero, inverso=0, i=-1;
tcola q;
init_queue(q);
cout<<"Ingrese numero: ";
cin>>numero;
while(numero>0){
push_queue(q,numero%10);
numero/=10;
i++;
}
while(empty_queue(q)==false){
inverso+=pop_queue(q)*pow(10.0.i);
i--;
}
cout<<"Inverso: "<<inverso<<endl;
system("pause");
}
void init_queue(tcola &q)
{
q.final=MAX-1;
q.frente=MAX-1;
}
void push_queue(tcola &q, int nuevo)
{
if(full_queue(q)==true)
cout<<"COLA LLENA"<<endl;
else{
q.final=next(q.final);
q.datos[q.final]=nuevo;
}
}
bool full_queue(tcola q)
{
return next(q.final)==q.frente;
}
bool empty_queue(tcola q)
{
return q.frente==q.final;
}
int pop_queue(tcola &q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q.frente=next(q.frente);
aux=q.datos[q.frente];
}
return aux;
}
int top_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q.datos[next(q.frente)];
}
return aux;
}
int bottom_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q.datos[q.final];
}
return aux;
}
int next(int indice)
{
if(indice==MAX-1)
indice=0;
else
indice++;
return indice;
}