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.
Temibles Lunas!¡.
Me desvele haciendote estas funciones para extraer un digito X de un numero tipo signed/unsigned int.
Código
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; for (i = 0; i < getLengthOfInt(iVal); ++i ) 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