¡Qué onda, dev! Bienvenido nuevamente a 8devmx, el rincón donde destripamos la programación para que la entiendas desde cero y sin rodeos. Cuando vamos empezando en el mundo del desarrollo web, es supercomún que ante cualquier reto con números queramos convertir la variable a un texto (string) para recorrer letra por letra cada dígito. Aunque eso funciona y te saca del apuro en JavaScript, depender de convertir tipos de datos todo el tiempo frena tu desarrollo del pensamiento lógico.
En este artículo aprenderás a resolver un problema clásico de entrevistas y exámenes universitarios: cómo extraer dígitos individuales de un número entero, evaluar si son pares o impares, y sumarlos por separado, todo mediante pura aritmética (operadores de módulo y división). ¡Prepara tu editor de código y vamos a darle!
¿Por qué evitar convertir números a texto?
Convertir un número a cadena mediante toString() o concatenándolo con "" para iterar con un bucle for parece el camino fácil. Sin embargo, procesar números con matemáticas pura ofrece grandes ventajas:
- Rendimiento superior: Operar directamente en memoria con números es mucho más rápido que instanciar objetos de texto y arreglos.
- Fundamento técnico: Te obliga a entender cómo funcionan los sistemas numéricos y los operadores a nivel binario y decimal.
- Independencia del lenguaje: Esta técnica funciona exactamente igual en JavaScript, PHP, C, Java, Python o cualquier otro lenguaje que elijas en el futuro.
Los dos pilares matemáticos: Módulo (%) y División Entera (Math.floor)
Para manipular un número dígito por dígito sin tocar texto, solo necesitas dominar dos operaciones básicas:
1. El operador Módulo (%)
El operador de residuo o módulo nos da el sobrante de una división entera. Cuando calculas numero % 10, el resultado siempre será el último dígito del número.
- Ejemplo:
123456 % 10nos da6. - Ejemplo:
987 % 10nos da7.
2. La división entera con Math.floor()
En JavaScript, las divisiones numéricas no son enteras por defecto (si divides 123456 / 10, obtienes 12345.6). Para eliminar ese último dígito que ya procesamos, dividimos entre 10 y redondeamos hacia abajo usando Math.floor().
- Ejemplo:
Math.floor(123456 / 10)resulta en12345.
Combinando ambos trucos en un bucle while, podemos ir extrayendo y “desechando” los números de derecha a izquierda hasta que el número original llegue a cero.
Explicación paso a paso del algoritmo
Imagina que queremos calcular la suma de los dígitos pares e impares de la cifra 123456.
- Inicializamos variables: Creamos acumuladores para la suma de pares (
sumaPares = 0) y la suma de impares (sumaImpares = 0). - Establecemos la condición de paro: Ejecutamos un bucle
while (numero > 0). Mientras queden dígitos por procesar, el bucle sigue girando. - Obtenemos el último dígito:
let ultimoDigito = numero % 10;. - Evaluamos paridad: Si
ultimoDigito % 2 === 0, le sumamos esa cantidad asumaPares. Si no, se la sumamos asumaImpares. - Recortamos el número: Actualizamos la variable original con
numero = Math.floor(numero / 10);. - Repetimos: El ciclo continúa hasta que el número sea
0y el bucle termine.
Código funcional en JavaScript
A continuación tienes el código completo y listo para probar en la consola de tu navegador o con Node.js:
// Función para procesar y sumar dígitos pares e impares
function analizarNumero(numeroOriginal) {
let numero = Math.abs(numeroOriginal); // Aseguramos que sea positivo
let sumaPares = 0;
let sumaImpares = 0;
while (numero > 0) {
// Extraemos el último dígito
let ultimoDigito = numero % 10;
// Verificamos si el dígito es par o impar
if (ultimoDigito % 2 === 0) {
sumaPares += ultimoDigito;
} else {
sumaImpares += ultimoDigito;
}
// Eliminamos el último dígito del número
numero = Math.floor(numero / 10);
}
console.log(`Número analizado: ${numeroOriginal}`);
console.log(`Suma de dígitos pares: ${sumaPares}`);
console.log(`Suma de dígitos impares: ${sumaImpares}`);
}
// Prueba del algoritmo
analizarNumero(123456);
/*
Salida esperada:
Número analizado: 123456
Suma de dígitos pares: 12 (6 + 4 + 2)
Suma de dígitos impares: 9 (5 + 3 + 1)
*/
Errores comunes al trabajar con números en JS
No te preocupes si a la primera te sale un bug; a todos nos pasa al inicio. Atento a estos tropezones habituales:
- Olvidar
Math.floor(): Si hacesnumero = numero / 10, tu variable se convertirá en un decimal infinito y tu programa entrará en un bucle infinito o arrojará resultados no deseados. - No contemplar números negativos: Si el usuario ingresa
-1234, el módulo puede retornar valores negativos. Siempre usaMath.abs()antes de iniciar el ciclo. - El límite de precisión (
Number.MAX_SAFE_INTEGER): En JavaScript, los números enteros con más de 15 o 16 dígitos pierden precisión. Si trabajas con números gigantescos, necesitarías usarBigInt.
Buenas prácticas de programación
- Nombres de variables expresivos: En lugar de llamar a tus variables
x,a,b, usa nombres claros comosumaPares,ultimoDigitoonumeroRestante. - Encapsula tu lógica en funciones: No dejes el código suelto en el script; créale una función reutilizable que reciba el número como parámetro.
- Validación de entradas: Valida siempre que el parámetro recibido sea realmente un número entero (
Number.isInteger()) antes de procesarlo.
Reto práctico para ti
¿Quieres poner a prueba lo aprendido? Intenta modificar la función para que no solo sume, sino que responda lo siguiente:
- ¿Cuántos dígitos en total tiene el número ingresado?
- ¿Cuál es el dígito más grande (el valor máximo) que se encontró dentro del número?
¡Copia el código a tu editor local, haz las modificaciones y compártelo con la comunidad!
Fuente original
Este artículo está inspirado en el concepto planteado en la publicación original: Solving Number-Based Problems in Python Without Strings escrita por Vidhya Murali. Hemos adaptado y ampliado el concepto enfocado a la sintaxis y ecosistema de JavaScript para la comunidad de 8devmx.