#include #include #include int najdi(char znak); void calc(int z, char *op1, char *op2, char *res); char moz[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; int main() { int z; scanf("%d", &z); char op1[1000], op2[1000], res[2000]; while (z != 0) { scanf("%s %s", op1, op2); memset(res, 0, 2000 * sizeof(char)); calc(z, op1, op2, res); printf("%s + %s = %s\n", op1, op2, res); // *res='\0'; scanf("%d", &z); } return 0; } void calc(int z, char*op1, char *op2, char *res) { int len1, len2, vetsi; len1 = strlen(op1); len2 = strlen(op2); if (z == 1) { int f1, f2; if (!strcmp(op1, "0")) f1 = 0; else f1 = len1; // printf(" if (!strcmp(op2, "0")) f2 = 0; else f2 = len2; if ((f1 + f2) == 0) { strcpy(res, "0"); return; } int v = 0; for (v = 0 ; v < (f1 + f2) ; v++) *(res + v) = '1'; *(res + v) = '\0'; return; } char temp[2000], temp2[2000]; memset(temp, '0', 2000 * sizeof(char)); char *o1, *o2; vetsi = len1; if (len2 > len1) { strcpy(temp + (len2 - len1), op1); vetsi = len2; o1 = op2; o2 = temp; } else { strcpy(temp + (len1 - len2), op2); o1 = temp; o2 = op1; } // printf("%s %s vetsi = %d\n", op1, op2, vetsi); int cifra1, cifra2, soucet, zbytek, podil = 0; int i; for (i = vetsi-1 ; i >= 0 ; i--) { cifra1 = najdi(o1[i]); cifra2 = najdi(o2[i]); soucet = cifra1 + cifra2 + podil; podil = soucet / z; zbytek = soucet % z; res[i] = moz[zbytek]; } // res[vetsi+1]= '\0'; // printf("res = %s\n", res); if (podil != 0) { *temp2 = moz[podil]; *(temp2+1) = '\0'; strcat(temp2, res); // printf("temp= %s\n",temp2); strcpy(res,temp2); } } int najdi(char znak) { int j = 0; for (j = 0 ; j < 36 ; j++) if (znak == moz[j]) break; return j; }