Programación General > C/C++

 Función recursiva para invertir número

(1/1)

chivomd:
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 ---#include <stdio.h> int invertir(int n); main() {     int n;    printf("Introduce un numero entero positivo: ");    scanf ("%d",&n);    printf ("El numero invertido es: %dn",invertir(n));} int invertir(int n){    int inv=0;    if (n<10){        inv=n;    }    else if ((n/10)<10){        inv=(10*(n%10))+(n/10);    }    else{        inv=(n%10)+(invertir(n/10)*10);    }    return(inv);}  
Un saludo y muchas gracias de antemano.

m0skit0:
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 ---inv = 3 + (invertir(12)*10)invertir(12) = 2121 * 10 = 210210 + 3 = 213 
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.

morringos:
Yo lo resolví de la siguiente manera bro, lo que si, está hecho en C#:


--- Código: C# --- private string Invertir(int num)        {            if (num < 10)                return num.ToString();            else                return (num % 10).ToString() + Invertir(num/10);        }  

Saludos!;
Morringos!;

Navegación

[0] Índice de Mensajes

Ir a la versión completa