#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *reverse_str(char *src) {
const size_t len
= strlen(src
); for (int i = 0; i < len >> 1; ++i) {
char tmp = src[i];
src[i] = src[len - 1 - i];
src[len - 1 - i] = tmp;
}
return src;
}
char *num2string(unsigned long long n, unsigned base) {
if (base < 2 || base > 36) {
fprintf(stderr
, "base %d is not supported", base
); return NULL;
}
char str[65] = {}; // 64bit + 1
for (int i = 0; n; n /= base, ++i) {
char c;
unsigned rem = n % base;
if (rem < 10)
c = '0' + rem;
else
c = 'A' + rem - 10;
str[i] = c;
}
return reverse_str(str);
}
int main(int argc, char **argv) {
unsigned long long n;
if (argc == 1)
else
n = atoll(argv[1]);
for (int base = 2; base <= 16; ++base)
printf("base(%d) --> %s\n", base
, num2string
(n
, base
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKY2hhciAqcmV2ZXJzZV9zdHIoY2hhciAqc3JjKSB7Cgljb25zdCBzaXplX3QgbGVuID0gc3RybGVuKHNyYyk7Cglmb3IgKGludCBpID0gMDsgaSA8IGxlbiA+PiAxOyArK2kpIHsKCQljaGFyIHRtcCA9IHNyY1tpXTsKCQlzcmNbaV0gPSBzcmNbbGVuIC0gMSAtIGldOwoJCXNyY1tsZW4gLSAxIC0gaV0gPSB0bXA7Cgl9CglyZXR1cm4gc3JjOwp9CgpjaGFyICpudW0yc3RyaW5nKHVuc2lnbmVkIGxvbmcgbG9uZyBuLCB1bnNpZ25lZCBiYXNlKSB7CglpZiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSB7CgkJZnByaW50ZihzdGRlcnIsICJiYXNlICVkIGlzIG5vdCBzdXBwb3J0ZWQiLCBiYXNlKTsKCQlyZXR1cm4gTlVMTDsKCX0KCgljaGFyIHN0cls2NV0gPSB7fTsJLy8gNjRiaXQgKyAxCglmb3IgKGludCBpID0gMDsgbjsgbiAvPSBiYXNlLCArK2kpIHsKCQljaGFyIGM7CgkJdW5zaWduZWQgcmVtID0gbiAlIGJhc2U7CgkJaWYgKHJlbSA8IDEwKQoJCQljID0gJzAnICsgcmVtOwoJCWVsc2UKCQkJYyA9ICdBJyArIHJlbSAtIDEwOwoJCXN0cltpXSA9IGM7Cgl9CglyZXR1cm4gcmV2ZXJzZV9zdHIoc3RyKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Cgl1bnNpZ25lZCBsb25nIGxvbmcgbjsKCWlmIChhcmdjID09IDEpCgkJc2NhbmYoIiVsbGQiLCAmbik7CgllbHNlCgkJbiA9IGF0b2xsKGFyZ3ZbMV0pOwoKCWZvciAoaW50IGJhc2UgPSAyOyBiYXNlIDw9IDE2OyArK2Jhc2UpCgkJcHJpbnRmKCJiYXNlKCVkKSAtLT4gJXNcbiIsIGJhc2UsIG51bTJzdHJpbmcobiwgYmFzZSkpOwogCglyZXR1cm4gMDsKfQo=