#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.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*2;
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(int argc, char* argv[]) {
char buf[10];
printf("decode value: '%s' -> %d\n", "A", decode
("A")); printf("decode value: '%s' -> %d\n", "Z", decode
("Z")); printf("decode value: '%s' -> %d\n", "AA", decode
("AA")); printf("decode value: '%s' -> %d\n", "DBA", decode
("DBA"));
printf("encode value: %d -> '%s'\n", 2757, encode
(buf
, sizeof buf
, 2757)); printf("encode value: %d -> '%s'\n", 125, encode
(buf
, sizeof buf
, 125));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgoKaW50IGNvbnN0IG1heCA9ICdaJy0nQScgKyAxOwoKc3RhdGljIGNoYXIgY29uc3QqCmVuY29kZShjaGFyKiBidWYsIHNpemVfdCBidWZzaXplLCBpbnQgbikgewoJY2hhciogYmVnID0gYnVmOwoJY2hhciogY3VyID0gYnVmK2J1ZnNpemUtMTsKCQoJKmJlZyA9ICpjdXIgPSAnXDAnOwoKCXdoaWxlIChuID4gMCAmJiBjdXIgPiBiZWcpIHsKCQlpbnQgciA9IChuJW1heCk7CgkJaWYgKHIgPT0gMCkgewoJCQluIC89IG1heCoyOwoJCQlyID0gbWF4OwoJCX0gZWxzZQoJCQluIC89IG1heDsKCQkqKC0tY3VyKSA9ICdBJy0xK3I7Cgl9CglyZXR1cm4gY3VyOwp9CgpzdGF0aWMgaW50CmRlY29kZShjaGFyIGNvbnN0KiBzdHIpIHsKCWNoYXIgY29uc3QqIGJlZyA9IHN0cjsKCWNoYXIgY29uc3QqIGVuZCA9IGJlZytzdHJsZW4oc3RyKS0xOwoJaW50IG4gPSAwOwoKCXdoaWxlIChiZWcgPCBlbmQpIHsKCQluICs9IHBvdyhtYXgsIGVuZC1iZWcpICogKCpiZWctJ0EnKzEpOwoJCSsrYmVnOwoJfQoJbiArPSAoKCplbmQpLSdBJysxKTsKCXJldHVybiBuOwp9CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CgljaGFyIGJ1ZlsxMF07CgoJcHJpbnRmKCJkZWNvZGUgdmFsdWU6ICclcycgLT4gJWRcbiIsICJBIiwgZGVjb2RlKCJBIikpOwoJcHJpbnRmKCJkZWNvZGUgdmFsdWU6ICclcycgLT4gJWRcbiIsICJaIiwgZGVjb2RlKCJaIikpOwoJcHJpbnRmKCJkZWNvZGUgdmFsdWU6ICclcycgLT4gJWRcbiIsICJBQSIsIGRlY29kZSgiQUEiKSk7CglwcmludGYoImRlY29kZSB2YWx1ZTogJyVzJyAtPiAlZFxuIiwgIkRCQSIsIGRlY29kZSgiREJBIikpOwoKCXByaW50ZigiZW5jb2RlIHZhbHVlOiAlZCAtPiAnJXMnXG4iLCAyNzU3LCBlbmNvZGUoYnVmLCBzaXplb2YgYnVmLCAyNzU3KSk7CglwcmludGYoImVuY29kZSB2YWx1ZTogJWQgLT4gJyVzJ1xuIiwgMTI1LCBlbmNvZGUoYnVmLCBzaXplb2YgYnVmLCAxMjUpKTsKCglyZXR1cm4gMDsKfQo=