#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
int const max = 'Z'-'A' + 1;
static char const*
encode(char* buf, size_t bufsize, int n) {
char* beg = buf;
char* cur = buf+bufsize-1;
*beg = *cur = '\0';
while (n > 0 && cur > beg) {
int r = (n%max);
if (r == 0) {
n /= max;
n--;
r = max;
} else
n /= max;
*(--cur) = 'A'-1+r;
}
return cur;
}
static int
decode(char const* str) {
char const* beg = str;
char const* end
= beg
+strlen(str
)-1; int n = 0;
while (beg < end) {
n
+= pow(max
, end
-beg
) * (*beg
-'A'+1); ++beg;
}
n += ((*end)-'A'+1);
return n;
}
int
main(void) {
char line[128];
char buf[10];
while (fgets(line
, sizeof line
, stdin
)) { if (line[len-1] == '\n')
line[len-1] = '\0';
printf("'%s' convert to\n", line
); int n = decode(line);
printf("decode value: '%d'\n", n
); printf("encode value: '%s'\n", encode
(buf
, sizeof buf
, n
)); } else {
char const* p;
printf("encode value: '%s'\n", p
=encode
(buf
, sizeof buf
, n
)); printf("decode value: '%d'\n", decode
(p
)); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCmludCBjb25zdCBtYXggPSAnWictJ0EnICsgMTsKCnN0YXRpYyBjaGFyIGNvbnN0KgplbmNvZGUoY2hhciogYnVmLCBzaXplX3QgYnVmc2l6ZSwgaW50IG4pIHsKCWNoYXIqIGJlZyA9IGJ1ZjsKCWNoYXIqIGN1ciA9IGJ1ZitidWZzaXplLTE7CgkKCSpiZWcgPSAqY3VyID0gJ1wwJzsKCgl3aGlsZSAobiA+IDAgJiYgY3VyID4gYmVnKSB7CgkJaW50IHIgPSAobiVtYXgpOwoJCWlmIChyID09IDApIHsKCQkJbiAvPSBtYXg7CgkJCW4tLTsKCQkJciA9IG1heDsKCQl9IGVsc2UKCQkJbiAvPSBtYXg7CgkJKigtLWN1cikgPSAnQSctMStyOwoJfQoJcmV0dXJuIGN1cjsKfQoKc3RhdGljIGludApkZWNvZGUoY2hhciBjb25zdCogc3RyKSB7CgljaGFyIGNvbnN0KiBiZWcgPSBzdHI7CgljaGFyIGNvbnN0KiBlbmQgPSBiZWcrc3RybGVuKHN0ciktMTsKCWludCBuID0gMDsKCgl3aGlsZSAoYmVnIDwgZW5kKSB7CgkJbiArPSBwb3cobWF4LCBlbmQtYmVnKSAqICgqYmVnLSdBJysxKTsKCQkrK2JlZzsKCX0KCW4gKz0gKCgqZW5kKS0nQScrMSk7CglyZXR1cm4gbjsKfQoKaW50Cm1haW4odm9pZCkgewoJY2hhciBsaW5lWzEyOF07CgljaGFyIGJ1ZlsxMF07CgoJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZiBsaW5lLCBzdGRpbikpIHsKCQlzaXplX3QgbGVuPXN0cmxlbihsaW5lKTsKCQlpZiAobGluZVtsZW4tMV0gPT0gJ1xuJykKCQkJbGluZVtsZW4tMV0gPSAnXDAnOwoKCQlwcmludGYoIiclcycgY29udmVydCB0b1xuIiwgbGluZSk7CgkJaWYgKGlzYWxwaGEobGluZVswXSkpIHsKCQkJaW50IG4gPSBkZWNvZGUobGluZSk7CgkJCXByaW50ZigiZGVjb2RlIHZhbHVlOiAnJWQnXG4iLCBuKTsKCQkJcHJpbnRmKCJlbmNvZGUgdmFsdWU6ICclcydcbiIsIGVuY29kZShidWYsIHNpemVvZiBidWYsIG4pKTsJCQoJCX0gZWxzZSB7CgkJCWludCBuID0gYXRvaShsaW5lKTsKCQkJY2hhciBjb25zdCogcDsKCQkJcHJpbnRmKCJlbmNvZGUgdmFsdWU6ICclcydcbiIsIHA9ZW5jb2RlKGJ1Ziwgc2l6ZW9mIGJ1ZiwgbikpOwkJCQkJCgkJCXByaW50ZigiZGVjb2RlIHZhbHVlOiAnJWQnXG4iLCBkZWNvZGUocCkpOwoJCX0KCQlwdXRzKCIiKTsKCX0KCXJldHVybiAwOwp9Cg==