C/Visual C - C. Inverir un número de n cifras

 
Vista:

C. Inverir un número de n cifras

Publicado por Felipe (3 intervenciones) el 20/04/2011 11:28:54
Hola, buenas a todos los interesados en ayudarme.
Mi problema es el siguiente, tengo que hacer una función que reciba por valor un número "long"
y que presente en pantalla dicho número pero invertido. Por ejemplo:

NUM ORIGINAL | NUM INVERTIDO
123 | 321
330 | 33
567483 | 384765

El caso es que no se especifica el número de cifras que va ha tener el numero.

Bueno, yo había pensado en esto:

void f_invertir_long(long int numero)
{
int i=9, cifrasO, cifrasF, temp, lista[9];

//Esto me permite conocer el número de cifras.
while((numero/(int)pow(10,i))==0)
{i--;
}
cifrasO=i+1;

//En esta parte descompongo el número en cifras y las introduzco en un vector.
temp=numero%(int)pow(10,cifrasO);
for(i=0;i<cifrasO-1;i++)
{lista[i]=temp/(int)pow(10,cifrasO-1-i);
temp=numero%(int)pow(10,cifrasO-1-i);
}
lista[cifrasO-1]=temp;

//Aquí invierto el vector.
for(i=0;i<(cifrasO/2);i++)
{temp=lista[i];
lista[i]=lista[cifrasO-1-i];
lista[cifrasO-1-i]=temp;
}

/*En esta parte busco a partir de qué posición en el vector empieza a ser distinto de cero. Esto
es para el caso de que 330 invertido sea 33, sin ese cero a la izquierda*/
i=0;
while(lista[i]==0)
{i++;
}
cifrasF=i;

//Finalmente escribo en pantalla el vector invertido y a partir de la primera cifra distinta de 0.
printf("\nEl número %d invertido es ", numero);
for(i=cifrasF;i<cifrasO;i++)
{printf("%d", lista[i]);
}
printf("\n\n");
}

El problema biene ahora, no se por qué (y mirad que lo he repasado veces) la última cifra del número sin invertir o la primera del número invertido no es la que deberia, es decir, si introducimos el número 1234, la función escribe 6321. No lo comprendo y estoy desesperado.
AYUDA.

Gracias por sus respuestas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

C. Inverir un número de n cifras

Publicado por Capitan Kirk (97 intervenciones) el 20/04/2011 13:50:18
No es necesario complicarse tanto la vida. Prueba esto:

main()
{
int num, resto, factor, result;

result = 0;
factor = 1;
printf("Introduce un numero: ");
scanf("%d", &num);
while (num > 0)
{
resto = num % 10;
result += resto * factor;
num /= 10;
factor *= 10;
}
printf("El numero invertido es %d\n", result;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

C. Inverir un número de n cifras

Publicado por Felipe (3 intervenciones) el 20/04/2011 17:08:14
Muchas gracias, la parte de código que me has enseñado me ha ayudado mucho, lo único es que no me aparece invertido el número, pero lo he slucionado asi:
int f_invertir(int numero)
{
int i, resto, factor=1, cifras=10;
int resultado=0;

while(numero/(int)pow(10,cifras)==0)
{cifras--;
}

for(i=0;i<cifras;i++)
factor*=10;

while(numero>0)
{resto=numero%10;
resultado+=resto*factor;
numero/=10;
factor/=10;
}

return resultado;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar