static int decimal(int x, char *ptr, int n) { if (x < 0) { *ptr++ = '-'; ++n; x = -x; } return unsimal(x, ptr, n); }
static int decimal(int x, char *ptr, int n) { if (x < 0) { x = -x; ptr[n++] = '-'; } return unsimal(x, ptr, n); }
static int unsimal(unsigned x, char *ptr, int n) { if (10<=x) { n = unsimal(x/10, ptr, n); x %= 10; } ptr[n] = '0' + x; return 1+ n; }
static int unsimal(unsigned x, char *ptr, int n) { if (10<=x) { unsigned const q = div10(x); x -= 10 * q; n = unsimal(q, ptr, n); } ptr[n] = '0' + x; return 1+ n; }