Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/09/2014, 20:04
Virtualforos
 
Fecha de Ingreso: octubre-2008
Mensajes: 66
Antigüedad: 16 años
Puntos: 1
Respuesta: Revirtiendo un número con función pow

Cita:
Iniciado por dehm Ver Mensaje
Creo que el problema lo tienes aquí:
Código C++:
Ver original
  1. revertido = revertido + ultima_cifra * pow( 10, contador );

La función pow() retorna un double, y tú lo estas multiplicando por un int. En esa parte pierdes la precisión que luego te provoca el error. Lo puedes comprobar imprimiendo el valor de revertido en cada iteración del bucle.
Puedes arreglarlo así:
Código C++:
Ver original
  1. #include <math.h>
  2. #include <stdio.h>
  3.  
  4. int main( void )
  5. {
  6.     int numero, contador = 0, ultima_cifra, revertido = 0;
  7.     double parcial=0;
  8.     printf( "Por favor tipea un numero de cinco cifras y yo lo revertire\n" );
  9.     scanf( "%d", &numero );
  10.     for( contador = 4; contador >= 0; contador-- )
  11.     {
  12.         ultima_cifra = numero% 10;
  13.         numero = numero / 10;
  14.         parcial = pow( 10, contador);
  15.         revertido = revertido +ultima_cifra* parcial;
  16.     }
  17.     printf( "El numero revertido es %d", revertido );
  18. }

Saludos!
Dehm,
funciona! Siguiendo tu consejo de imprimir el valor de "revertido" imprimí todas las variables, está pasando algo... muy extraño

Código:
#include <math.h>
#include <stdio.h>
void main( void )
{
    int numero, contador = 0, ultima_cifra, revertido = 0;
    printf( "Por favor tipea un numero de cinco digitos y yo lo revertire\n" );
    scanf( "%d", &numero );
    for( contador = 4; contador >= 0; contador-- )
    {
        ultima_cifra = numero % 10;
        numero = numero / 10;
        printf( "%d %d %f %f\n\n", revertido, ultima_cifra, pow( 10, contador ), revertido + ultima_cifra * pow( 10, contador ));
        revertido = revertido + ultima_cifra * pow( 10, contador );
    }
    printf( "El numero revertido es %d", revertido );
}
EJECUCIÓN DE EJEMPLO
Por favor tipea un numero de cinco digitos y yo lo revertire
12345
0 5 10000.000000 50000.000000
49999 4 1000.000000 53999.000000
53999 3 100.000000 54299.000000
54299 2 10.000000 54319.000000
54319 1 1.000000 54320.000000
El numero revertido es 54320


De esto extraigo que el problema ocurre cuando se le asigna por primera vez este 50000.000000 a revertido: PIERDE una unidad! Y lo más loco de todo, es que solo ocurre en el primer recorrido del for (en la primera asignación). En las subsiguientes asignaciones no se pierde ninguna unidad. ¿Que raro no? ¿Alguna explicación?

PD: ¿Cómo se hace para postear el código con formato C++, como lo hacen ustedes?