155 lines
2.3 KiB
C
155 lines
2.3 KiB
C
#include "main.h"
|
|
|
|
/**
|
|
* printf_dec - prints decimal
|
|
* @args: argument to print
|
|
* Return: number of characters printed
|
|
*/
|
|
|
|
int printf_dec(va_list args)
|
|
{
|
|
int n = va_arg(args, int);
|
|
int num, last = n % 10, digit;
|
|
int i = 1;
|
|
int exp = 1;
|
|
|
|
n = n / 10;
|
|
num = n;
|
|
|
|
if (last < 0)
|
|
{
|
|
_putchar('-');
|
|
num = -num;
|
|
n = -n;
|
|
last = -last;
|
|
i++;
|
|
}
|
|
if (num > 0)
|
|
{
|
|
while (num / 10 != 0)
|
|
{
|
|
exp = exp * 10;
|
|
num = num / 10;
|
|
}
|
|
num = n;
|
|
while (exp > 0)
|
|
{
|
|
digit = num / exp;
|
|
_putchar(digit + '0');
|
|
num = num - (digit * exp);
|
|
exp = exp / 10;
|
|
i++;
|
|
}
|
|
}
|
|
_putchar(last + '0');
|
|
|
|
return (i);
|
|
}
|
|
|
|
#include "main.h"
|
|
|
|
/**
|
|
* printf_oct - prints an octal number.
|
|
* @val: arguments.
|
|
* Return: counter.
|
|
*/
|
|
int printf_oct(va_list val)
|
|
{
|
|
int i;
|
|
int *array;
|
|
int counter = 0;
|
|
unsigned int num = va_arg(val, unsigned int);
|
|
unsigned int temp = num;
|
|
|
|
while (num / 8 != 0)
|
|
{
|
|
num /= 8;
|
|
counter++;
|
|
}
|
|
counter++;
|
|
array = malloc(counter * sizeof(int));
|
|
|
|
for (i = 0; i < counter; i++)
|
|
{
|
|
array[i] = temp % 8;
|
|
temp /= 8;
|
|
}
|
|
for (i = counter - 1; i >= 0; i--)
|
|
{
|
|
_putchar(array[i] + '0');
|
|
}
|
|
free(array);
|
|
return (counter);
|
|
}
|
|
|
|
/**
|
|
* printf_hex_aux - prints an hexgecimal number.
|
|
* @num: arguments.
|
|
* Return: counter.
|
|
*/
|
|
int printf_hex_aux(unsigned long int num)
|
|
{
|
|
long int i;
|
|
long int *array;
|
|
long int counter = 0;
|
|
unsigned long int temp = num;
|
|
|
|
while (num / 16 != 0)
|
|
{
|
|
num /= 16;
|
|
counter++;
|
|
}
|
|
counter++;
|
|
array = malloc(counter * sizeof(long int));
|
|
|
|
for (i = 0; i < counter; i++)
|
|
{
|
|
array[i] = temp % 16;
|
|
temp /= 16;
|
|
}
|
|
for (i = counter - 1; i >= 0; i--)
|
|
{
|
|
if (array[i] > 9)
|
|
array[i] = array[i] + 39;
|
|
_putchar(array[i] + '0');
|
|
}
|
|
free(array);
|
|
return (counter);
|
|
}
|
|
|
|
/**
|
|
* printf_hex - prints an hexgecimal number.
|
|
* @val: arguments.
|
|
* Return: counter.
|
|
*/
|
|
int printf_hex(va_list val)
|
|
{
|
|
int i;
|
|
int *array;
|
|
int counter = 0;
|
|
unsigned int num = va_arg(val, unsigned int);
|
|
unsigned int temp = num;
|
|
|
|
while (num / 16 != 0)
|
|
{
|
|
num /= 16;
|
|
counter++;
|
|
}
|
|
counter++;
|
|
array = malloc(counter * sizeof(int));
|
|
|
|
for (i = 0; i < counter; i++)
|
|
{
|
|
array[i] = temp % 16;
|
|
temp /= 16;
|
|
}
|
|
for (i = counter - 1; i >= 0; i--)
|
|
{
|
|
if (array[i] > 9)
|
|
array[i] = array[i] + 39;
|
|
_putchar(array[i] + '0');
|
|
}
|
|
free(array);
|
|
return (counter);
|
|
}
|