#include #include #include #include #define MAX 1010 typedef char Cislo[MAX]; char toDigit(char ch) { if(isdigit(ch)) return ch - '0'; else return ch - 'A' + 10; } char toChar(char x) { if(x < 10) return x + '0'; else return x + 'A' - 10; } int ReadCislo(const char* str, Cislo c) { //printf("Ctu cislo\n"); int len = strlen(str); int i, j; for(i = 0, j = len - 1; j >= 0; ++i, --j) c[i] = toDigit(str[j]); return len; } void PrintCislo(Cislo c, int len) { for(int i = len - 1; i >= 0; --i) putchar(toChar(c[i])); } char s1[MAX], s2[MAX]; Cislo c1, c2, v; bool OneTask() { int base; scanf("%d", &base); if(base == 0) return false; if(base == 1) { scanf("%s %s", s1, s2); if(s1[0] == '0') { printf("%s + %s = %s\n", s1, s2, s2); } else if(s2[0] == '0') { printf("%s + %s = %s\n", s1, s2, s1); } else { char s3[MAX * 2]; strcpy(s3, s1); strcat(s3, s2); printf("%s + %s = %s\n", s1, s2, s3); } return true; } int l1, l2, l; scanf("%s %s", s1, s2); l1 = ReadCislo(s1, c1); l2 = ReadCislo(s2, c2); l = l1 > l2 ? l1 : l2; for(int i = l1; i <= l; ++i) c1[i] = 0; for(int i = l2; i <= l; ++i) c2[i] = 0; int carry = 0; int i; for(i = 0; i < l || carry != 0; ++i) { v[i] = c1[i] + c2[i] + carry; carry = v[i] / base; v[i] = v[i] % base; } printf("%s + %s = ", s1, s2); PrintCislo(v, i); putchar('\n'); return true; } int main() { while(OneTask()) ; return 0; }