¡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:

  1. Rendimiento superior: Operar directamente en memoria con números es mucho más rápido que instanciar objetos de texto y arreglos.
  2. Fundamento técnico: Te obliga a entender cómo funcionan los sistemas numéricos y los operadores a nivel binario y decimal.
  3. 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 % 10 nos da 6.
  • Ejemplo: 987 % 10 nos da 7.

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

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.

  1. Inicializamos variables: Creamos acumuladores para la suma de pares (sumaPares = 0) y la suma de impares (sumaImpares = 0).
  2. Establecemos la condición de paro: Ejecutamos un bucle while (numero > 0). Mientras queden dígitos por procesar, el bucle sigue girando.
  3. Obtenemos el último dígito: let ultimoDigito = numero % 10;.
  4. Evaluamos paridad: Si ultimoDigito % 2 === 0, le sumamos esa cantidad a sumaPares. Si no, se la sumamos a sumaImpares.
  5. Recortamos el número: Actualizamos la variable original con numero = Math.floor(numero / 10);.
  6. Repetimos: El ciclo continúa hasta que el número sea 0 y 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 haces numero = 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 usa Math.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 usar BigInt.

Buenas prácticas de programación

  • Nombres de variables expresivos: En lugar de llamar a tus variables x, a, b, usa nombres claros como sumaPares, ultimoDigito o numeroRestante.
  • 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:

  1. ¿Cuántos dígitos en total tiene el número ingresado?
  2. ¿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.