#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) {
}
}
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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bnNpZ25lZCByZXZlcnNlKAogICAgdW5zaWduZWQgaW5wdXQsCiAgICB1bnNpZ25lZCBjb25zdCBiYXNlLAogICAgdW5zaWduZWQgKiBjb25zdCB6ZXJvcykgewogIHVuc2lnbmVkIG91dHB1dCA9IDA7CiAgdW5zaWduZWQgc3RpbGxfemVybyA9IDA7CiAgZm9yICg7IGlucHV0ICE9IDA7IGlucHV0Lz1iYXNlKSB7CiAgICBvdXRwdXQgKj0gYmFzZTsKICAgIG91dHB1dCArPSBpbnB1dCAlIGJhc2U7CiAgICBpZiAob3V0cHV0ID09IDApIHsKICAgICAgKytzdGlsbF96ZXJvOwogICAgfQogIH0KICBpZiAoemVyb3MgIT0gTlVMTCkgewogICAgKnplcm9zID0gc3RpbGxfemVybzsKICB9CiAgcmV0dXJuIG91dHB1dDsKfQoKdm9pZCBwcmludF96ZXJvcyh1bnNpZ25lZCB6ZXJvcykgewogIGZvciAoOyB6ZXJvcyAhPSAwOyAtLXplcm9zKSB7CiAgICBwcmludGYoIjAiKTsKICB9Cn0KCmludCBtYWluKHZvaWQpIHsKICB1bnNpZ25lZCB2YWx1ZSA9IDMyMDsKICB1bnNpZ25lZCB6ZXJvczsKICB1bnNpZ25lZCByZXZlcnNlZDsKCiAgcmV2ZXJzZWQgPSByZXZlcnNlICh2YWx1ZSwgMTAsICYgemVyb3MpOwogIHByaW50ZigiJXUgIC0gICIsIHZhbHVlKTsgcHJpbnRfemVyb3MoemVyb3MpOyBwcmludGYoIiV1XG4iLCByZXZlcnNlZCk7CgogIHJldmVyc2VkID0gcmV2ZXJzZSAodmFsdWUsIDgsICYgemVyb3MpOwogIHByaW50ZigiJW8gIC0gICIsIHZhbHVlKTsgcHJpbnRfemVyb3MoemVyb3MpOyBwcmludGYoIiVvXG4iLCByZXZlcnNlZCk7CgogIHJldmVyc2VkID0gcmV2ZXJzZSAodmFsdWUsIDE2LCAmIHplcm9zKTsKICBwcmludGYoIiV4ICAtICAiLCB2YWx1ZSk7IHByaW50X3plcm9zKHplcm9zKTsgcHJpbnRmKCIleFxuIiwgcmV2ZXJzZWQpOwoKICByZXR1cm4gMDsKfQ==