#include #include #define MAX_DIG 2000 char * numbers = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char ret1[MAX_DIG+1] , ret2[MAX_DIG+1], ret3 [(2 * MAX_DIG)+1]; int main (void) { int zaklad; char * pos1, *pos2, *pos3; int val1, val2, val3; int prenos; while (1) { prenos=0; scanf("%d", &zaklad); if (zaklad == 0 ) { return 0; } scanf("%s %s", ret1, ret2); if ( zaklad == 1 ) { if ( *ret1 == '0') { printf("0"); } else { printf("%s", ret1); } if ( *ret2 == '0') { printf(" + 0 = "); } else { printf(" + %s = ", ret2); } if ( *ret1 != '0') { printf("%s", ret1); } if ( *ret2 != '0') { printf("%s", ret2); } if ( *ret1 == '0' && * ret2 == '0') { printf("0"); } printf("\n"); continue; } else { val3=0; pos1=ret1+(strlen(ret1)-1); pos2=ret2+(strlen(ret2)-1); pos3=ret3 + 2 * MAX_DIG; while (pos1 >= ret1 || pos2 >= ret2) { if (pos1 >= ret1) { val1=strchr(numbers, *pos1) - numbers; pos1--; } else { val1 = 0; } if (pos2 >= ret2) { val2=strchr(numbers, *pos2) - numbers; pos2--; } else { val2 = 0; } val3 = val1 + val2 + prenos; prenos = 0; while (val3 >= zaklad) { val3 -= zaklad; prenos++; } /*fprintf(stderr, "A=%c, B=%c, TRANS=%i, val=%i\n", *(pos1+1), *(pos2+1), prenos, val3 );*/ *pos3 = numbers [val3]; pos3--; } if (prenos) { *pos3 = numbers [prenos]; } else { pos3++; } printf("%s + %s = %s\n", ret1, ret2, pos3); } } }