#include <stdio.h>

unsigned reverse(
    unsigned input,
    unsigned const base,
    unsigned * const zeros) {
  unsigned output = 0;
  unsigned still_zero = 0;
  for (; input != 0; input/=base) {
    output *= base;
    output += input % base;
    if (output == 0) {
      ++still_zero;
    }
  }
  if (zeros != NULL) {
    *zeros = still_zero;
  }
  return output;
}

void print_zeros(unsigned zeros) {
  for (; zeros != 0; --zeros) {
    printf("0");
  }
}

int main(void) {
  unsigned value = 320;
  unsigned zeros;
  unsigned reversed;

  reversed = reverse (value, 10, & zeros);
  printf("%u  -  ", value); print_zeros(zeros); printf("%u\n", reversed);

  reversed = reverse (value, 8, & zeros);
  printf("%o  -  ", value); print_zeros(zeros); printf("%o\n", reversed);

  reversed = reverse (value, 16, & zeros);
  printf("%x  -  ", value); print_zeros(zeros); printf("%x\n", reversed);

  return 0;
}