fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <ctype.h>
  6.  
  7. int const max = 'Z'-'A' + 1;
  8.  
  9. static char const*
  10. encode(char* buf, size_t bufsize, int n) {
  11. char* beg = buf;
  12. char* cur = buf+bufsize-1;
  13.  
  14. *beg = *cur = '\0';
  15.  
  16. while (n > 0 && cur > beg) {
  17. int r = (n%max);
  18. if (r == 0) {
  19. n /= max;
  20. n--;
  21. r = max;
  22. } else
  23. n /= max;
  24. *(--cur) = 'A'-1+r;
  25. }
  26. return cur;
  27. }
  28.  
  29. static int
  30. decode(char const* str) {
  31. char const* beg = str;
  32. char const* end = beg+strlen(str)-1;
  33. int n = 0;
  34.  
  35. while (beg < end) {
  36. n += pow(max, end-beg) * (*beg-'A'+1);
  37. ++beg;
  38. }
  39. n += ((*end)-'A'+1);
  40. return n;
  41. }
  42.  
  43. int
  44. main(void) {
  45. char line[128];
  46. char buf[10];
  47.  
  48. while (fgets(line, sizeof line, stdin)) {
  49. size_t len=strlen(line);
  50. if (line[len-1] == '\n')
  51. line[len-1] = '\0';
  52.  
  53. printf("'%s' convert to\n", line);
  54. if (isalpha(line[0])) {
  55. int n = decode(line);
  56. printf("decode value: '%d'\n", n);
  57. printf("encode value: '%s'\n", encode(buf, sizeof buf, n));
  58. } else {
  59. int n = atoi(line);
  60. char const* p;
  61. printf("encode value: '%s'\n", p=encode(buf, sizeof buf, n));
  62. printf("decode value: '%d'\n", decode(p));
  63. }
  64. puts("");
  65. }
  66. return 0;
  67. }
  68.  
Success #stdin #stdout 0s 2056KB
stdin
A
Z
AA
ZZ
DBA
AAZ
ZZZ
2757
125
stdout
'A' convert to
decode value: '1'
encode value: 'A'

'Z' convert to
decode value: '26'
encode value: 'Z'

'AA' convert to
decode value: '27'
encode value: 'AA'

'ZZ' convert to
decode value: '702'
encode value: 'ZZ'

'DBA' convert to
decode value: '2757'
encode value: 'DBA'

'AAZ' convert to
decode value: '728'
encode value: 'AAZ'

'ZZZ' convert to
decode value: '18278'
encode value: 'ZZZ'

'2757' convert to
encode value: 'DBA'
decode value: '2757'

'125' convert to
encode value: 'DU'
decode value: '125'