char *ft_itoa_base_ull(unsigned long long value, int base) { char *ans; int p; if (base < 2 || 16 < base || !(ans = (char *)malloc(sizeof(char) * 35))) return (NULL); p = 0; if (base == 10) aux_dix(value, ans, &p); else aux(value, (unsigned int)base, ans, &p); ans[p] = '\0'; return (ans); }
char *ft_itoa_base_ulongmax(size_t value, int base) { char *ans; int p; if (base < 2 || 16 < base || !(ans = (char *)malloc(sizeof(char) * 35))) return (NULL); p = 0; if (base == 10 && value < 4294967296) aux_dix_int(value, ans, &p); else if (base == 10 && value > 4294967296) aux_dix((size_t)value, ans, &p); else aux((size_t)value, (unsigned int)base, ans, &p); ans[p] = '\0'; return (ans); }
static void aux_dix(unsigned long long n, char *ans, int *p) { if (9 < n) aux_dix(n / 10, ans, p); ans[(*p)++] = n % 10; }
static void aux_dix(size_t n, char *ans, int *p) { if (9 < n) aux_dix(n / 10, ans, p); ans[(*p)++] = '0' + ABS(n % 10); }