74 lines
1.6 KiB
C
74 lines
1.6 KiB
C
|
/* ************************************************************************** */
|
||
|
/* */
|
||
|
/* ::: :::::::: */
|
||
|
/* ft_itoa.c :+: :+: :+: */
|
||
|
/* +:+ +:+ +:+ */
|
||
|
/* By: gtertysh <marvin@42.fr> +#+ +:+ +#+ */
|
||
|
/* +#+#+#+#+#+ +#+ */
|
||
|
/* Created: 2016/12/02 19:59:03 by gtertysh #+# #+# */
|
||
|
/* Updated: 2016/12/04 15:12:59 by gtertysh ### ########.fr */
|
||
|
/* */
|
||
|
/* ************************************************************************** */
|
||
|
|
||
|
#include "libft.h"
|
||
|
|
||
|
static void help_help(int *n, char *ret, int *i)
|
||
|
{
|
||
|
if (*n < 0)
|
||
|
{
|
||
|
ret[0] = '-';
|
||
|
*i = *i + 1;
|
||
|
*n = -(*n);
|
||
|
}
|
||
|
if (*n == 0)
|
||
|
ret[0] = '0';
|
||
|
}
|
||
|
|
||
|
static char *help(int n, long *div)
|
||
|
{
|
||
|
int len;
|
||
|
char *ret;
|
||
|
|
||
|
ret = NULL;
|
||
|
len = 0;
|
||
|
while (n)
|
||
|
{
|
||
|
n /= 10;
|
||
|
*div = *div * 10;
|
||
|
len++;
|
||
|
}
|
||
|
if (n < 0 || n == 0)
|
||
|
len++;
|
||
|
ret = ft_strnew(len);
|
||
|
return (ret);
|
||
|
}
|
||
|
|
||
|
char *ft_itoa(int n)
|
||
|
{
|
||
|
char *ret;
|
||
|
long div;
|
||
|
int i;
|
||
|
int exception;
|
||
|
|
||
|
exception = 0;
|
||
|
div = 1;
|
||
|
i = 0;
|
||
|
if (n == -2147483648)
|
||
|
{
|
||
|
n = n / 10;
|
||
|
exception = 1;
|
||
|
}
|
||
|
if (!(ret = help(n, &div)))
|
||
|
return (NULL);
|
||
|
help_help(&n, ret, &i);
|
||
|
while (div > 1)
|
||
|
{
|
||
|
div /= 10;
|
||
|
ret[i++] = n / div + '0';
|
||
|
n = n % div;
|
||
|
}
|
||
|
if (exception)
|
||
|
ret[i] = '8';
|
||
|
return (ret);
|
||
|
}
|