int ft_putlong_base(long long nb, char *base) { int length; int ret; ret = 0; length = ft_strlen(base); if (length > 0) { if (nb < 0) { if (length + 1 == 10) write(1, "-", 1); nb = -nb; } if (nb >= length) { ret += ft_putlong_base(nb / length, base); ret += ft_putlong_base(nb % length, base); } else { write(1, &base[nb], 1); return (1); } } return (ret); }
int ft_putdouble_base(double d, int prec, char *base) { int i; int len; i = 0; len = ft_putlong_base((int)d, base) + 1; printchar('.'); d -= (int)d; while (i++ < prec) { d *= 10; if ((int)d == 0) { printchar('0'); len++; } } return ft_putlong_base((int)d, BASE_DEC) + len; }
void ft_putlong_base(long n, long base) { char *base_digits; base_digits = "0123456789abcdefghijklmnopqrstuvwxyz"; if (base == 10 && n < 0) { if (n == LONG_MIN) { ft_putstr("-9223372036854775808"); return ; } ft_putchar('-'); n *= -1; } if (n >= base) ft_putlong_base(n / base, base); ft_putchar(base_digits[n % base]); }