Cita de: BlackZeroX (Astaroth) en 26 Diciembre 2011, 18:46 PM
Lo que pasa es que son caracteres... no numeros... revisate la tabla ASCII, por ejemplo, cuando escribes 4 el indice de n4[0] no sera un valor 4 sera SU VALOR EN ASCII...
Me desvele haciendote estas funciones para extraer un digito X de un numero tipo signed/unsigned int.Código (c) [Seleccionar]
int extracNumFromUInt(unsigned int iVal, unsigned int index);
int extracNumFromInt(int iVal, unsigned int index);
int getLengthOfUInt(unsigned int iVal);
int getLengthOfInt(int iVal);
/**
Proposito: Obtiene la longitud de un numero Decimal.
Retorno: Longitud de el numero
NOTA: TODO NUMERO decimal tiene una longitud minima de 1
By BlackZeroX.
**/
int getLengthOfUInt(unsigned int iVal)
{
int i = 1;
while (iVal /= 10)
i++;
if (iVal % 10)
i++;
return i;
}
/**
Proposito: Obtiene la longitud de un numero Decimal.
Retorno: Longitud de el numero
NOTA: TODO NUMERO decimal tiene una longitud minima de 1
By BlackZeroX.
**/
int getLengthOfInt(int iVal)
{
return getLengthOfUInt((0x80000000 & iVal) ? (unsigned)(~(--iVal)):(unsigned)iVal); // Removemos el signo...
}
/**
Proposito: Extre un numero DECIMAL de un numero de entero sin signo
Retorno: Si falla retorna ~0
Si es satisfactorio extrae el numero deseado.
By BlackZeroX.
**/
int extracNumFromInt(int iVal, // Numero Deseado.
unsigned int index // El Indice es de Izquierda a Derecha...
)
{
return extracNumFromUInt((0x80000000 & iVal) ? (unsigned)(~(--iVal)):(unsigned)iVal, // Removemos el signo...
index);
}
/**
Proposito: Extre un numero DECIMAL de un numero de entero sin signo
Retorno: Si falla retorna ~0
Si es satisfactorio extrae el numero deseado.
By BlackZeroX.
**/
int extracNumFromUInt(unsigned int iVal, // Numero Deseado.
unsigned int index // El Indice es de Izquierda a Derecha...
)
{
int iSize = getLengthOfUInt(iVal);
int iRet = iVal,
i = 0;
if (index > iSize) // ¿Indice Erroneo?.
return ~0;
index = (iSize - index); // Corregimos el indice para que se trabaje como si fueran arrays...
if (index != iSize) // ¿Debemos eliminar los digitos de la parte Izquierda?
{
for (i = 0; i < index; ++i) // Removemos
iRet /= 10;
for (i = 0; i < (index); ++i) // suplantamos por 0's
iRet *= 10;
iRet = (iVal - iRet); // Eliminamos los digitos de la izquierda...
}
iSize = getLengthOfUInt(iRet);
if (iSize > 1) // ¿Debemos eliminar los digitos d ela Derecha?...
for (i = 1; i < index; ++i)
iRet /= 10; // Eliminamos...
return iRet; // Retornamos.
}
/// EntryPoint
int main(int argc, char *argv[])
{
int i = 0;
int iVal = -4898456;
printf("%d\n", iVal);
for (i = 0; i < getLengthOfInt(iVal); ++i )
printf("%d\n", extracNumFromInt(iVal, i));
getchar();
return EXIT_SUCCESS;
}
Temibles Lunas!¡.
Perdón, pero... Soy muy principiante en C... Y no entiendo eso que acabas de hacer... No sé qué son los códigos ASCII, a pesar de que he estado mirando en Internet las cadenas (y no venía nada de eso...)
Muchas gracias.
Saludos