#include #include #include #define isin(x, a, b) ((x >= a) && (x <= b)) int prevod(char *a, int zaklad) { int result = 0; int len = strlen(a); for (int i = 0; i < (int)strlen(a); i++) { if (zaklad == 1) result++; else result += (int)((isin(a[i], '0', '9') ? a[i] - '0' : a[i] - 'A' + 10) * pow(zaklad, len - i - 1)); } // printf("--(%d)--", result); return result; } char* prevodZpet(int cislo, int zaklad) { static char zpet[2000]; for (unsigned int i = 0; i < strlen(zpet); i++) zpet[i] = 0; if (zaklad == 1) { for (int i = 0; i < cislo; i++) zpet[i] = '1'; return zpet; } int i = 0; while (cislo) { int modl; modl = cislo % zaklad; // printf("%d", modl); zpet[i] = (modl >= 10) ? ('A' - 10 + modl) : ('0' + modl); cislo /= zaklad; i++; } static char zpet2[2000]; int len = strlen(zpet); for (int i = 0; i < len; i++) zpet2[len - i- 1] = zpet[i]; zpet2[len]=0; return zpet2; } void provedTo(char *a, char* b, int zaklad) { int c1 = prevod(a, zaklad); int c2 = prevod(b, zaklad); // printf(" (%d %d) ", c1,c2); int soucet = c1 + c2; printf("%s + %s = %s\n", a, b, prevodZpet(soucet, zaklad)); } int main() { int zaklad; char a[1000], b[1000]; while (true) { scanf("%d", &zaklad); if (zaklad == 0) break; scanf("%s %s", a, b); provedTo(a, b, zaklad); } return 0; }