SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: chivomd en Lunes 27 de Octubre de 2008, 19:02

Título: Función recursiva para invertir número
Publicado por: chivomd en Lunes 27 de Octubre de 2008, 19:02
Hola, he estado ojeando vuestra web y he pensado que quizás podríais ayudarme con este problema: se trata de invertir un número introducido por teclado de manera recursiva. El problema viene al introducir un número de 3 o más dígitos, ya que solo invierte dos dígitos, dejando el que en teoría debería de estar primero al final(por ejemplo, 123 queda como 213).

He aquí el código que he hecho:

Código: Text
  1. #include <stdio.h>
  2.  
  3. int invertir(int n);
  4.  
  5. main() {
  6.  
  7.     int n;
  8.     printf("Introduce un numero entero positivo: ");
  9.     scanf ("%d",&n);
  10.     printf ("El numero invertido es: %dn",invertir(n));
  11. }
  12.  
  13. int invertir(int n){
  14.     int inv=0;
  15.     if (n<10){
  16.         inv=n;
  17.     }
  18.     else if ((n/10)<10){
  19.         inv=(10*(n%10))+(n/10);
  20.     }
  21.     else{
  22.         inv=(n%10)+(invertir(n/10)*10);
  23.     }
  24.     return(inv);
  25. }
  26.  
  27.  

Un saludo y muchas gracias de antemano.
Título: Re: Función recursiva para invertir número
Publicado por: m0skit0 en Lunes 27 de Octubre de 2008, 20:19
Pero, ¿y si por ejemplo alguien ingresa 1000? Tal y como tú lo planteas el resultado sería 1 (si el programa funcionara bien, claro), ¿es esto aceptable?

EDIT: Bueno, tras depurarlo un poco veo que el problema radica en inv=(n%10)+(invertir(n/10)*10);, ya que al pasarle 123 por ejemplo:

Código: Text
  1. inv = 3 + (invertir(12)*10)
  2. invertir(12) = 21
  3. 21 * 10 = 210
  4. 210 + 3 = 213
  5.  

Deberías multiplicar (n%10) por 100 (primera potencia de 10 superior a 12) para que funcionase. Pero tu problema fundamental radica en que no tienes en cuenta la longitud del número introducido. Piensa en hacerlo con cadenas de caracteres.
Título: Re: Función recursiva para invertir número
Publicado por: morringos en Domingo 14 de Marzo de 2010, 22:00
Yo lo resolví de la siguiente manera bro, lo que si, está hecho en C#:

Código: C#
  1.  
  2. private string Invertir(int num)
  3.         {
  4.             if (num < 10)
  5.                 return num.ToString();
  6.             else
  7.                 return (num % 10).ToString() + Invertir(num/10);
  8.         }
  9.  
  10.  


Saludos!;
Morringos!;