-
Notifications
You must be signed in to change notification settings - Fork 0
ft_putnbr
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).
#include "ft_printf.h"Se incluye el archivo de cabecera ft_printf.h para acceder a las funciones necesarias, como ft_putchar.
int ft_putnbr(int nb)-
int nb: El número entero que se va a imprimir.
-
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úmero147483648.
- Se imprime el signo negativo (
-
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. -
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 / 10y luego connb % 10. -
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 usandoft_putchar.
#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);
}Vamos a descomponer el funcionamiento de la recursión con un ejemplo. Supongamos que nb = 1234.
-
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 aft_putnbr(4).
- El número es mayor que 9, por lo que se divide:
-
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 aft_putnbr(3).
- El número es mayor que 9, por lo que se divide:
-
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 aft_putnbr(2).
- El número es mayor que 9, por lo que se divide:
-
Cuarta llamada a
ft_putnbr(1):- El número es menor o igual a 9, por lo que simplemente lo imprimimos:
-
ft_putchar('1').
-
- El número es menor o igual a 9, por lo que simplemente lo imprimimos:
-
Finalmente:
- Se imprimen
2,3y4en ese orden, sumando al total de caracteres impresos.
- Se imprimen