Skip to content

ft_putnbr

Marcos edited this page Oct 6, 2024 · 2 revisions

La función ft_putnbr se encarga de imprimir un número entero en formato decimal. Maneja números positivos, negativos y el caso especial del número mínimo de 32 bits (–2147483648).

Enlace al código original

Implementación

Inclusión de la Cabecera

#include "ft_printf.h"

Se incluye el archivo de cabecera ft_printf.h para acceder a las funciones necesarias, como ft_putchar.

Función ft_putnbr

int ft_putnbr(int nb)

Parámetros:

  • int nb: El número entero que se va a imprimir.

Funcionamiento:

  1. Caso especial para –2147483648: El número mínimo de 32 bits requiere un manejo especial debido a que su valor absoluto no puede ser representado por un entero positivo de 32 bits.

    • Se imprime el signo negativo (-), luego el dígito '2' y finalmente el número 147483648.
  2. Números negativos: Si el número es negativo y distinto de –2147483648, se imprime el signo negativo (-) y luego la versión positiva del número usando una llamada recursiva.

  3. Números mayores que 9: Si el número tiene más de un dígito, se divide entre 10 para imprimir los dígitos uno por uno, primero llamando a la función con nb / 10 y luego con nb % 10.

  4. Números de un dígito: Si el número tiene solo un dígito (de 0 a 9), se convierte a su carácter correspondiente sumándole '0' y se imprime usando ft_putchar.

Código Comentado

#include "ft_printf.h"

/*
 * Esta función imprime un número entero.
 * Puede manejar números negativos y el caso especial del mínimo valor de 32 bits.
 */

int	ft_putnbr(int nb)
{
	int	count;

    // Inicializamos el contador en 0
	count = 0;

    // Caso especial para el número mínimo de 32 bits (-2147483648)
	if (nb == -2147483648)
	{
        // Imprime el signo negativo '-'
		count += ft_putchar('-');
        // Imprime el dígito '2' porque el número es -2147483648
		count += ft_putchar('2');
        // Llamada recursiva con el resto del número (147483648)
		count += ft_putnbr(147483648);
	}
    // Si el número es negativo (pero no -2147483648)
	else if (nb < 0)
	{
        // Imprime el signo negativo '-'
		count += ft_putchar('-');
        // Llamada recursiva con el valor absoluto del número
		count += ft_putnbr(-nb);
	}
    // Si el número tiene más de un dígito
	else if (nb > 9)
	{
        // Llamada recursiva para imprimir todos los dígitos menos el último
		count += ft_putnbr(nb / 10);
        // Llamada recursiva para imprimir el último dígito
		count += ft_putnbr(nb % 10);
	}
    // Si el número es de un solo dígito
	else
	{
        // Convertimos el número a su carácter y lo imprimimos
		count += ft_putchar(nb + '0');
	}
    
    // Retornamos el número total de caracteres impresos
	return (count);
}

Explicación Paso a Paso

Vamos a descomponer el funcionamiento de la recursión con un ejemplo. Supongamos que nb = 1234.

  1. Primera llamada a ft_putnbr(1234):

    • El número es mayor que 9, por lo que se divide:
      • 1234 / 10 = 123 (primeros dígitos).
      • 1234 % 10 = 4 (último dígito).
    • Llamamos recursivamente a ft_putnbr(123) y luego a ft_putnbr(4).
  2. Segunda llamada a ft_putnbr(123):

    • El número es mayor que 9, por lo que se divide:
      • 123 / 10 = 12 (primeros dígitos).
      • 123 % 10 = 3 (último dígito).
    • Llamamos recursivamente a ft_putnbr(12) y luego a ft_putnbr(3).
  3. Tercera llamada a ft_putnbr(12):

    • El número es mayor que 9, por lo que se divide:
      • 12 / 10 = 1 (primer dígito).
      • 12 % 10 = 2 (último dígito).
    • Llamamos recursivamente a ft_putnbr(1) y luego a ft_putnbr(2).
  4. Cuarta llamada a ft_putnbr(1):

    • El número es menor o igual a 9, por lo que simplemente lo imprimimos:
      • ft_putchar('1').
  5. Finalmente:

    • Se imprimen 2, 3 y 4 en ese orden, sumando al total de caracteres impresos.

Clone this wiki locally