• Jueves 14 de Noviembre de 2024, 23:26

Autor Tema:  Función recursiva para invertir número  (Leído 72964 veces)

chivomd

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Función recursiva para invertir número
« en: Lunes 27 de Octubre de 2008, 19:02 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Función recursiva para invertir número
« Respuesta #1 en: Lunes 27 de Octubre de 2008, 20:19 »
0
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.

morringos

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: 00
    • Ver Perfil
Re: Función recursiva para invertir número
« Respuesta #2 en: Domingo 14 de Marzo de 2010, 22:00 »
0
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!;