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.
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


0