/*
Print integers in a given base 2-16 (default 10)
*/
#include <stdio.h>
#include <stdlib.h>

int convert(int n, int b, char str[], int i) {
	if (n/b > 0)
		i = convert(n/b, b, str, i);
	str[i++] = "0123456789ABCDEF"[n%b];
	return i;
}

int itoa(int n, int b, char str[]) {
	int i = convert(n, b, str, 0);
	str[i] = '\0';
	return i;
}

int main(int argc, char *argv[]) {
	int i;

	for (i = 1; i < argc - 1; i += 2) {
		int n, base, len;
		char buf[50];
		sscanf(argv[i], "%d", &n);
		sscanf(argv[i+1], "%d", &base);
		if (base < 2 || base > 16) {
			printf("%s: %d is a invalid base; using 10\n", argv[0], base);
			base = 10;
		}
		len = itoa(n, base, buf);
		printf("%s (%d)\n", buf, len);
	}
	return 0;
}

