#include #include #define MAX 1024 size_t convert (unsigned char *src) { unsigned char *p; p = src; while (*p != 0) { if (*p >= '0' && *p <= '9') *p -= '0'; else *p -= 'A' - 10; p++; } return p - src; } int main (void) { for (;;) { unsigned base; unsigned char buf1[MAX], buf2[MAX], *p1, *p2, *e1, *e2, *s; size_t l1, l2; scanf ("%u", &base); if (base == 0) break; buf1[0] = 0; buf2[0] = 0; scanf ("\n%s %s", buf1 + 1, buf2 + 1); printf ("%s + %s = ", buf1 + 1, buf2 + 1); if (base != 1) { l1 = convert (buf1 + 1); l2 = convert (buf2 + 1); if (l1 >= l2) { p1 = buf1; e1 = p1 + l1 + 1; p2 = buf2 + 1; e2 = p2 + l2; } else { p2 = buf1 + 1; e2 = p1 + l1; p1 = buf2; e1 = p2 + l2 + 1; } s = e1 - 1; /* len (1) >= len (2) */ while (e2-- > p2) { *s += *e2; s[-1] += *s / base; *s %= base; s--; } while (s > p1) { s[-1] += *s / base; *s %= base; s--; } if (*p1 == 0) p1++; while (p1 < e1) { putchar (*p1 < 10 ? '0' + *p1 : 'A' + *p1 - 10); p1++; } putchar ('\n'); } else { if (buf1[1] == '0') printf ("%s\n", buf2 + 1); else if (buf2[1] == '0') printf ("%s\n", buf1 + 1); else printf ("%s%s\n", buf1 + 1, buf2 + 1); } } return EXIT_SUCCESS; }